From ff7eea27e7560fde52ea236111abfe319aa7ed85 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 4 Sep 2013 18:01:38 +0100 Subject: [PATCH 01/67] Add --dhcp-relay config option. --- CHANGELOG | 2 + man/dnsmasq.8 | 32 +++++++ src/dhcp-common.c | 12 ++- src/dhcp.c | 208 +++++++++++++++++++++++++++++++++---------- src/dhcp6.c | 221 +++++++++++++++++++++++++++------------------- src/dnsmasq.c | 94 ++++++++++---------- src/dnsmasq.h | 11 +++ src/netlink.c | 10 +-- src/network.c | 2 +- src/option.c | 28 ++++++ src/outpacket.c | 4 +- src/rfc3315.c | 120 ++++++++++++++++++++++++- 12 files changed, 548 insertions(+), 196 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 78b9316..3fa133c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -101,6 +101,8 @@ version 2.67 (provide TFTP to the same interfaces we provide DHCP to) is retained. Thanks to Lonnie Abelbeck for the suggestion. + Add --dhcp-relay config option. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index 4357d99..05733b8 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -973,6 +973,38 @@ DHCP options. This make extra space available in the DHCP packet for options but can, rarely, confuse old or broken clients. This flag forces "simple and safe" behaviour to avoid problems in such a case. .TP +.B --dhcp-relay=,[,,[enterprise:,] Map from a vendor-class string to a tag. Most DHCP clients provide a "vendor class" which represents, in some sense, the type of host. This option diff --git a/src/dhcp-common.c b/src/dhcp-common.c index e5e136a..939f25a 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -757,6 +757,16 @@ void log_context(int family, struct dhcp_context *context) #endif } - +void log_relay(int family, struct dhcp_relay *relay) +{ + inet_ntop(family, &relay->local, daemon->addrbuff, ADDRSTRLEN); + inet_ntop(family, &relay->server, daemon->namebuff, ADDRSTRLEN); + + if (relay->interface) + my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay from %s to %s via %s"), daemon->addrbuff, daemon->namebuff, relay->interface); + else + my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay from %s to %s"), daemon->addrbuff, daemon->namebuff); +} + #endif diff --git a/src/dhcp.c b/src/dhcp.c index b95a4ba..573de5b 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -20,6 +20,8 @@ struct iface_param { struct dhcp_context *current; + struct dhcp_relay *relay; + struct in_addr relay_local; int ind; }; @@ -32,6 +34,8 @@ static int complete_context(struct in_addr local, int if_index, char *label, struct in_addr netmask, struct in_addr broadcast, void *vparam); static int check_listen_addrs(struct in_addr local, int if_index, char *label, struct in_addr netmask, struct in_addr broadcast, void *vparam); +static int relay_upstream4(struct dhcp_relay *relay, struct dhcp_packet *mess, size_t sz, int iface_index); +static struct dhcp_relay *relay_reply4(struct dhcp_packet *mess, char *arrival_interface); static int make_fd(int port) { @@ -132,6 +136,8 @@ void dhcp_packet(time_t now, int pxe_fd) int fd = pxe_fd ? daemon->pxefd : daemon->dhcpfd; struct dhcp_packet *mess; struct dhcp_context *context; + struct dhcp_relay *relay; + int is_relay_reply = 0; struct iname *tmp; struct ifreq ifr; struct msghdr msg; @@ -250,57 +256,86 @@ void dhcp_packet(time_t now, int pxe_fd) unicast_dest = 1; #endif - ifr.ifr_addr.sa_family = AF_INET; - if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) != -1 ) - iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr; + if ((relay = relay_reply4((struct dhcp_packet *)daemon->dhcp_packet.iov_base, ifr.ifr_name))) + { + /* Reply from server, using us as relay. */ + iface_index = relay->iface_index; + if (!indextoname(daemon->dhcpfd, iface_index, ifr.ifr_name)) + return; + is_relay_reply = 1; + iov.iov_len = sz; +#ifdef HAVE_LINUX_NETWORK + strncpy(arp_req.arp_dev, ifr.ifr_name, 16); +#endif + } else { - my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name); - return; - } - - for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next) - if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) - return; - - /* unlinked contexts are marked by context->current == context */ - for (context = daemon->dhcp; context; context = context->next) - context->current = context; - - parm.current = NULL; - parm.ind = iface_index; - - if (!iface_check(AF_INET, (struct all_addr *)&iface_addr, ifr.ifr_name, NULL)) - { - /* If we failed to match the primary address of the interface, see if we've got a --listen-address - for a secondary */ - struct match_param match; + ifr.ifr_addr.sa_family = AF_INET; + if (ioctl(daemon->dhcpfd, SIOCGIFADDR, &ifr) != -1 ) + iface_addr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr; + else + { + my_syslog(MS_DHCP | LOG_WARNING, _("DHCP packet received on %s which has no address"), ifr.ifr_name); + return; + } - match.matched = 0; - match.ind = iface_index; + for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next) + if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) + return; - if (!daemon->if_addrs || - !iface_enumerate(AF_INET, &match, check_listen_addrs) || - !match.matched) + /* unlinked contexts/relays are marked by context->current == context */ + for (context = daemon->dhcp; context; context = context->next) + context->current = context; + + for (relay = daemon->relay4; relay; relay = relay->next) + relay->current = relay; + + parm.current = NULL; + parm.relay = NULL; + parm.relay_local.s_addr = 0; + parm.ind = iface_index; + + if (!iface_check(AF_INET, (struct all_addr *)&iface_addr, ifr.ifr_name, NULL)) + { + /* If we failed to match the primary address of the interface, see if we've got a --listen-address + for a secondary */ + struct match_param match; + + match.matched = 0; + match.ind = iface_index; + + if (!daemon->if_addrs || + !iface_enumerate(AF_INET, &match, check_listen_addrs) || + !match.matched) + return; + + iface_addr = match.addr; + /* make sure secondary address gets priority in case + there is more than one address on the interface in the same subnet */ + complete_context(match.addr, iface_index, NULL, match.netmask, match.broadcast, &parm); + } + + if (!iface_enumerate(AF_INET, &parm, complete_context)) return; - iface_addr = match.addr; - /* make sure secondary address gets priority in case - there is more than one address on the interface in the same subnet */ - complete_context(match.addr, iface_index, NULL, match.netmask, match.broadcast, &parm); - } + /* We're relaying this request */ + if (parm.relay_local.s_addr != 0 && + relay_upstream4(parm.relay, (struct dhcp_packet *)daemon->dhcp_packet.iov_base, (size_t)sz, iface_index)) + return; + + /* May have configured relay, but not DHCP server */ + if (!daemon->dhcp) + return; + + lease_prune(NULL, now); /* lose any expired leases */ + iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, iface_index, (size_t)sz, + now, unicast_dest, &is_inform, pxe_fd, iface_addr); + lease_update_file(now); + lease_update_dns(0); - if (!iface_enumerate(AF_INET, &parm, complete_context)) - return; - - lease_prune(NULL, now); /* lose any expired leases */ - iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, iface_index, (size_t)sz, - now, unicast_dest, &is_inform, pxe_fd, iface_addr); - lease_update_file(now); - lease_update_dns(0); - - if (iov.iov_len == 0) - return; + if (iov.iov_len == 0) + return; + } msg.msg_name = &dest; msg.msg_namelen = sizeof(dest); @@ -321,7 +356,7 @@ void dhcp_packet(time_t now, int pxe_fd) if (mess->ciaddr.s_addr != 0) dest.sin_addr = mess->ciaddr; } - else if (mess->giaddr.s_addr) + else if (mess->giaddr.s_addr && !is_relay_reply) { /* Send to BOOTP relay */ dest.sin_port = htons(daemon->dhcp_server_port); @@ -334,7 +369,7 @@ void dhcp_packet(time_t now, int pxe_fd) source port too, and send back to that. If we're replying to a DHCPINFORM, trust the source address always. */ if ((!is_inform && dest.sin_addr.s_addr != mess->ciaddr.s_addr) || - dest.sin_port == 0 || dest.sin_addr.s_addr == 0) + dest.sin_port == 0 || dest.sin_addr.s_addr == 0 || is_relay_reply) { dest.sin_port = htons(daemon->dhcp_client_port); dest.sin_addr = mess->ciaddr; @@ -450,6 +485,7 @@ static int complete_context(struct in_addr local, int if_index, char *label, struct in_addr netmask, struct in_addr broadcast, void *vparam) { struct dhcp_context *context; + struct dhcp_relay *relay; struct iface_param *param = vparam; (void)label; @@ -495,6 +531,15 @@ static int complete_context(struct in_addr local, int if_index, char *label, } } + for (relay = daemon->relay4; relay; relay = relay->next) + if (if_index == param->ind && relay->local.addr.addr4.s_addr == local.s_addr && relay->current == relay && + (param->relay_local.s_addr == 0 || param->relay_local.s_addr == local.s_addr)) + { + relay->current = param->relay; + param->relay = relay; + param->relay_local = local; + } + return 1; } @@ -988,5 +1033,74 @@ char *host_from_dns(struct in_addr addr) return NULL; } -#endif +static int relay_upstream4(struct dhcp_relay *relay, struct dhcp_packet *mess, size_t sz, int iface_index) +{ + /* ->local is same value for all relays on ->current chain */ + struct all_addr from; + + if (mess->op != BOOTREQUEST) + return 0; + /* source address == relay address */ + from.addr.addr4 = relay->local.addr.addr4; + + /* already gatewayed ? */ + if (mess->giaddr.s_addr) + { + /* if so check if by us, to stomp on loops. */ + if (mess->giaddr.s_addr == relay->local.addr.addr4.s_addr) + return 1; + } + else + { + /* plug in our address */ + mess->giaddr.s_addr = relay->local.addr.addr4.s_addr; + } + + if ((mess->hops++) > 20) + return 1; + + for (; relay; relay = relay->current) + { + union mysockaddr to; + + to.sa.sa_family = AF_INET; + to.in.sin_addr = relay->server.addr.addr4; + to.in.sin_port = htons(daemon->dhcp_server_port); + + send_from(daemon->dhcpfd, 0, (char *)mess, sz, &to, &from, 0); + + if (option_bool(OPT_LOG_OPTS)) + { + inet_ntop(AF_INET, &relay->local, daemon->addrbuff, ADDRSTRLEN); + my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay %s -> %s"), daemon->addrbuff, inet_ntoa(relay->server.addr.addr4)); + } + + /* Save this for replies */ + relay->iface_index = iface_index; + } + + return 1; +} + + +static struct dhcp_relay *relay_reply4(struct dhcp_packet *mess, char *arrival_interface) +{ + struct dhcp_relay *relay; + + if (mess->giaddr.s_addr == 0 || mess->op != BOOTREPLY) + return NULL; + + for (relay = daemon->relay4; relay; relay = relay->next) + { + if (mess->giaddr.s_addr == relay->local.addr.addr4.s_addr) + { + if (!relay->interface || wildcard_match(relay->interface, arrival_interface)) + return relay->iface_index != 0 ? relay : NULL; + } + } + + return NULL; +} + +#endif diff --git a/src/dhcp6.c b/src/dhcp6.c index 3bb855f..35bb748 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -20,7 +20,8 @@ struct iface_param { struct dhcp_context *current; - struct in6_addr fallback; + struct dhcp_relay *relay; + struct in6_addr fallback, relay_local; int ind, addr_match; }; @@ -87,6 +88,7 @@ void dhcp6_init(void) void dhcp6_packet(time_t now) { struct dhcp_context *context; + struct dhcp_relay *relay; struct iface_param parm; struct cmsghdr *cmptr; struct msghdr msg; @@ -126,56 +128,75 @@ void dhcp6_packet(time_t now) if (!indextoname(daemon->dhcp6fd, if_index, ifr.ifr_name)) return; - - for (tmp = daemon->if_except; tmp; tmp = tmp->next) - if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) - return; - for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next) - if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) - return; - - parm.current = NULL; - parm.ind = if_index; - parm.addr_match = 0; - memset(&parm.fallback, 0, IN6ADDRSZ); - - for (context = daemon->dhcp6; context; context = context->next) - if (IN6_IS_ADDR_UNSPECIFIED(&context->start6) && context->prefix == 0) - { - /* wildcard context for DHCP-stateless only */ - parm.current = context; - context->current = NULL; - } - else - { - /* unlinked contexts are marked by context->current == context */ - context->current = context; - memset(&context->local6, 0, IN6ADDRSZ); - } - - if (!iface_enumerate(AF_INET6, &parm, complete_context6)) - return; - - if (daemon->if_names || daemon->if_addrs) + if ((port = relay_reply6(&from, sz, ifr.ifr_name)) == 0) { - for (tmp = daemon->if_names; tmp; tmp = tmp->next) + for (tmp = daemon->if_except; tmp; tmp = tmp->next) if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) - break; + return; + + for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next) + if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) + return; + + parm.current = NULL; + parm.relay = NULL; + memset(&parm.relay_local, 0, IN6ADDRSZ); + parm.ind = if_index; + parm.addr_match = 0; + memset(&parm.fallback, 0, IN6ADDRSZ); + + for (context = daemon->dhcp6; context; context = context->next) + if (IN6_IS_ADDR_UNSPECIFIED(&context->start6) && context->prefix == 0) + { + /* wildcard context for DHCP-stateless only */ + parm.current = context; + context->current = NULL; + } + else + { + /* unlinked contexts are marked by context->current == context */ + context->current = context; + memset(&context->local6, 0, IN6ADDRSZ); + } - if (!tmp && !parm.addr_match) + for (relay = daemon->relay6; relay; relay = relay->next) + relay->current = relay; + + if (!iface_enumerate(AF_INET6, &parm, complete_context6)) return; + + if (daemon->if_names || daemon->if_addrs) + { + + for (tmp = daemon->if_names; tmp; tmp = tmp->next) + if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) + break; + + if (!tmp && !parm.addr_match) + return; + } + + if (parm.relay) + { + relay_upstream6(parm.relay, sz, &from.sin6_addr, from.sin6_scope_id); + return; + } + + /* May have configured relay, but not DHCP server */ + if (!daemon->doing_dhcp6) + return; + + lease_prune(NULL, now); /* lose any expired leases */ + + port = dhcp6_reply(parm.current, if_index, ifr.ifr_name, &parm.fallback, + sz, IN6_IS_ADDR_MULTICAST(&from.sin6_addr), now); + + lease_update_file(now); + lease_update_dns(0); } - - lease_prune(NULL, now); /* lose any expired leases */ - - port = dhcp6_reply(parm.current, if_index, ifr.ifr_name, &parm.fallback, - sz, IN6_IS_ADDR_MULTICAST(&from.sin6_addr), now); - - lease_update_file(now); - lease_update_dns(0); - + /* The port in the source address of the original request should be correct, but at least once client sends from the server port, so we explicitly send to the client port to a client, and the @@ -194,70 +215,84 @@ static int complete_context6(struct in6_addr *local, int prefix, unsigned int valid, void *vparam) { struct dhcp_context *context; + struct dhcp_relay *relay; struct iface_param *param = vparam; struct iname *tmp; (void)scope; /* warning */ - if (if_index == param->ind && - !IN6_IS_ADDR_LOOPBACK(local) && - !IN6_IS_ADDR_LINKLOCAL(local) && - !IN6_IS_ADDR_MULTICAST(local)) + if (if_index == param->ind) { - /* if we have --listen-address config, see if the - arrival interface has a matching address. */ - for (tmp = daemon->if_addrs; tmp; tmp = tmp->next) - if (tmp->addr.sa.sa_family == AF_INET6 && - IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, local)) - param->addr_match = 1; - - /* Determine a globally address on the arrival interface, even - if we have no matching dhcp-context, because we're only - allocating on remote subnets via relays. This - is used as a default for the DNS server option. */ - param->fallback = *local; - - for (context = daemon->dhcp6; context; context = context->next) + if (!IN6_IS_ADDR_LOOPBACK(local) && + !IN6_IS_ADDR_LINKLOCAL(local) && + !IN6_IS_ADDR_MULTICAST(local)) { - if ((context->flags & CONTEXT_DHCP) && - !(context->flags & (CONTEXT_TEMPLATE | CONTEXT_OLD)) && - prefix == context->prefix && - is_same_net6(local, &context->start6, prefix) && - is_same_net6(local, &context->end6, prefix)) + /* if we have --listen-address config, see if the + arrival interface has a matching address. */ + for (tmp = daemon->if_addrs; tmp; tmp = tmp->next) + if (tmp->addr.sa.sa_family == AF_INET6 && + IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, local)) + param->addr_match = 1; + + /* Determine a globally address on the arrival interface, even + if we have no matching dhcp-context, because we're only + allocating on remote subnets via relays. This + is used as a default for the DNS server option. */ + param->fallback = *local; + + for (context = daemon->dhcp6; context; context = context->next) { - - - /* link it onto the current chain if we've not seen it before */ - if (context->current == context) + if ((context->flags & CONTEXT_DHCP) && + !(context->flags & (CONTEXT_TEMPLATE | CONTEXT_OLD)) && + prefix == context->prefix && + is_same_net6(local, &context->start6, prefix) && + is_same_net6(local, &context->end6, prefix)) { - struct dhcp_context *tmp, **up; - /* use interface values only for contructed contexts */ - if (!(context->flags & CONTEXT_CONSTRUCTED)) - preferred = valid = 0xffffffff; - else if (flags & IFACE_DEPRECATED) - preferred = 0; - - if (context->flags & CONTEXT_DEPRECATE) - preferred = 0; - /* order chain, longest preferred time first */ - for (up = ¶m->current, tmp = param->current; tmp; tmp = tmp->current) - if (tmp->preferred <= preferred) - break; - else - up = &tmp->current; - - context->current = *up; - *up = context; - context->local6 = *local; - context->preferred = preferred; - context->valid = valid; + /* link it onto the current chain if we've not seen it before */ + if (context->current == context) + { + struct dhcp_context *tmp, **up; + + /* use interface values only for contructed contexts */ + if (!(context->flags & CONTEXT_CONSTRUCTED)) + preferred = valid = 0xffffffff; + else if (flags & IFACE_DEPRECATED) + preferred = 0; + + if (context->flags & CONTEXT_DEPRECATE) + preferred = 0; + + /* order chain, longest preferred time first */ + for (up = ¶m->current, tmp = param->current; tmp; tmp = tmp->current) + if (tmp->preferred <= preferred) + break; + else + up = &tmp->current; + + context->current = *up; + *up = context; + context->local6 = *local; + context->preferred = preferred; + context->valid = valid; + } } } } + + for (relay = daemon->relay6; relay; relay = relay->next) + if (IN6_ARE_ADDR_EQUAL(local, &relay->local.addr.addr6) && relay->current == relay && + (IN6_IS_ADDR_UNSPECIFIED(¶m->relay_local) || IN6_ARE_ADDR_EQUAL(local, ¶m->relay_local))) + { + relay->current = param->relay; + param->relay = relay; + param->relay_local = *local; + } + } - return 1; + + return 1; } struct dhcp_config *config_find_by_address6(struct dhcp_config *configs, struct in6_addr *net, int prefix, u64 addr) diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 71d4412..4663591 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -52,6 +52,7 @@ int main (int argc, char **argv) cap_user_data_t data = NULL; #endif struct dhcp_context *context; + struct dhcp_relay *relay; #ifdef LOCALEDIR setlocale(LC_ALL, ""); @@ -166,50 +167,47 @@ int main (int argc, char **argv) daemon->soa_sn = now; #endif -#ifdef HAVE_DHCP - if (daemon->dhcp || daemon->dhcp6) - { +#ifdef HAVE_DHCP6 + if (daemon->dhcp6) + { + daemon->doing_ra = option_bool(OPT_RA); -# ifdef HAVE_DHCP6 - if (daemon->dhcp6) + for (context = daemon->dhcp6; context; context = context->next) { - daemon->doing_ra = option_bool(OPT_RA); - - for (context = daemon->dhcp6; context; context = context->next) - { - if (context->flags & CONTEXT_DHCP) - daemon->doing_dhcp6 = 1; - if (context->flags & CONTEXT_RA) - daemon->doing_ra = 1; + if (context->flags & CONTEXT_DHCP) + daemon->doing_dhcp6 = 1; + if (context->flags & CONTEXT_RA) + daemon->doing_ra = 1; #ifndef HAVE_LINUX_NETWORK - if (context->flags & CONTEXT_TEMPLATE) - die (_("dhcp-range constructor not available on this platform"), NULL, EC_BADCONF); + if (context->flags & CONTEXT_TEMPLATE) + die (_("dhcp-range constructor not available on this platform"), NULL, EC_BADCONF); #endif - } } -# endif - - /* Note that order matters here, we must call lease_init before - creating any file descriptors which shouldn't be leaked - to the lease-script init process. We need to call common_init - before lease_init to allocate buffers it uses.*/ - if (daemon->dhcp || daemon->doing_dhcp6) - { - dhcp_common_init(); - lease_init(now); - } - - if (daemon->dhcp) - dhcp_init(); - -# ifdef HAVE_DHCP6 - if (daemon->doing_ra) - ra_init(now); - - if (daemon->doing_dhcp6) - dhcp6_init(); -# endif } +#endif + +#ifdef HAVE_DHCP + /* Note that order matters here, we must call lease_init before + creating any file descriptors which shouldn't be leaked + to the lease-script init process. We need to call common_init + before lease_init to allocate buffers it uses.*/ + if (daemon->dhcp || daemon->doing_dhcp6 || daemon->relay4 || daemon->relay6) + { + dhcp_common_init(); + if (daemon->dhcp || daemon->doing_dhcp6) + lease_init(now); + } + + if (daemon->dhcp || daemon->relay4) + dhcp_init(); + +# ifdef HAVE_DHCP6 + if (daemon->doing_ra) + ra_init(now); + + if (daemon->doing_dhcp6 || daemon->relay6) + dhcp6_init(); +# endif #endif @@ -239,7 +237,7 @@ int main (int argc, char **argv) #if defined(HAVE_LINUX_NETWORK) && defined(HAVE_DHCP) /* after enumerate_interfaces() */ - if (daemon->dhcp) + if (daemon->dhcp || daemon->relay4) { bindtodevice(daemon->dhcpfd); if (daemon->enable_pxe) @@ -248,7 +246,7 @@ int main (int argc, char **argv) #endif #if defined(HAVE_LINUX_NETWORK) && defined(HAVE_DHCP6) - if (daemon->doing_dhcp6) + if (daemon->doing_dhcp6 || daemon->relay6) bindtodevice(daemon->dhcp6fd); #endif } @@ -257,7 +255,7 @@ int main (int argc, char **argv) #ifdef HAVE_DHCP6 /* after enumerate_interfaces() */ - if (daemon->doing_dhcp6 || daemon->doing_ra) + if (daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra) join_multicast(1); #endif @@ -641,10 +639,16 @@ int main (int argc, char **argv) for (context = daemon->dhcp; context; context = context->next) log_context(AF_INET, context); + for (relay = daemon->relay4; relay; relay = relay->next) + log_relay(AF_INET, relay); + # ifdef HAVE_DHCP6 for (context = daemon->dhcp6; context; context = context->next) log_context(AF_INET6, context); + for (relay = daemon->relay6; relay; relay = relay->next) + log_relay(AF_INET6, relay); + if (daemon->doing_dhcp6 || daemon->doing_ra) dhcp_construct_contexts(now); @@ -749,7 +753,7 @@ int main (int argc, char **argv) #endif #ifdef HAVE_DHCP - if (daemon->dhcp) + if (daemon->dhcp || daemon->relay4) { FD_SET(daemon->dhcpfd, &rset); bump_maxfd(daemon->dhcpfd, &maxfd); @@ -762,7 +766,7 @@ int main (int argc, char **argv) #endif #ifdef HAVE_DHCP6 - if (daemon->doing_dhcp6) + if (daemon->doing_dhcp6 || daemon->relay6) { FD_SET(daemon->dhcp6fd, &rset); bump_maxfd(daemon->dhcp6fd, &maxfd); @@ -874,7 +878,7 @@ int main (int argc, char **argv) #endif #ifdef HAVE_DHCP - if (daemon->dhcp) + if (daemon->dhcp || daemon->relay4) { if (FD_ISSET(daemon->dhcpfd, &rset)) dhcp_packet(now, 0); @@ -883,7 +887,7 @@ int main (int argc, char **argv) } #ifdef HAVE_DHCP6 - if (daemon->doing_dhcp6 && FD_ISSET(daemon->dhcp6fd, &rset)) + if ((daemon->doing_dhcp6 || daemon->relay6) && FD_ISSET(daemon->dhcp6fd, &rset)) dhcp6_packet(now); if (daemon->doing_ra && FD_ISSET(daemon->icmp6fd, &rset)) diff --git a/src/dnsmasq.h b/src/dnsmasq.h index f37034d..b1a1644 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -775,6 +775,12 @@ struct tftp_prefix { struct tftp_prefix *next; }; +struct dhcp_relay { + struct all_addr local, server; + char *interface; /* Allowable interface for replies from server, and dest for IPv6 multicast */ + int iface_index; /* working - interface in which requests arrived, for return */ + struct dhcp_relay *current, *next; +}; extern struct daemon { /* datastuctures representing the command-line and @@ -824,6 +830,7 @@ extern struct daemon { struct pxe_service *pxe_services; struct tag_if *tag_if; struct addr_list *override_relays; + struct dhcp_relay *relay4, *relay6; int override; int enable_pxe; int doing_ra, doing_dhcp6; @@ -1217,6 +1224,9 @@ void dhcp_construct_contexts(time_t now); #ifdef HAVE_DHCP6 unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name, struct in6_addr *fallback, size_t sz, int is_multicast, time_t now); +void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id); + +unsigned short relay_reply6( struct sockaddr_in6 *peer, ssize_t sz, char *arrival_interface); #endif /* dhcp-common.c */ @@ -1243,6 +1253,7 @@ void bindtodevice(int fd); void display_opts6(void); # endif void log_context(int family, struct dhcp_context *context); +void log_relay(int family, struct dhcp_relay *relay); #endif /* outpacket.c */ diff --git a/src/netlink.c b/src/netlink.c index 43cd21e..2bcaf01 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -402,18 +402,18 @@ static int nl_async(struct nlmsghdr *h) static void nl_newaddress(time_t now) { - if (option_bool(OPT_CLEVERBIND) || daemon->doing_dhcp6 || daemon->doing_ra) + if (option_bool(OPT_CLEVERBIND) || daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra) enumerate_interfaces(0); if (option_bool(OPT_CLEVERBIND)) create_bound_listeners(0); #ifdef HAVE_DHCP6 + if (daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra) + join_multicast(0); + if (daemon->doing_dhcp6 || daemon->doing_ra) - { - join_multicast(0); - dhcp_construct_contexts(now); - } + dhcp_construct_contexts(now); if (daemon->doing_dhcp6) lease_find_interfaces(now); diff --git a/src/network.c b/src/network.c index 7a5d49e..46e49ce 100644 --- a/src/network.c +++ b/src/network.c @@ -851,7 +851,7 @@ void join_multicast(int dienow) inet_pton(AF_INET6, ALL_RELAY_AGENTS_AND_SERVERS, &mreq.ipv6mr_multiaddr); - if (daemon->doing_dhcp6 && + if ((daemon->doing_dhcp6 || daemon->relay6) && setsockopt(daemon->dhcp6fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq)) == -1) err = 1; diff --git a/src/option.c b/src/option.c index b03388a..b12ca39 100644 --- a/src/option.c +++ b/src/option.c @@ -133,6 +133,7 @@ struct myoption { #define LOPT_PREF_CLSS 321 #endif #define LOPT_FAST_RA 322 +#define LOPT_RELAY 323 #ifdef HAVE_GETOPT_LONG static const struct option opts[] = @@ -271,6 +272,7 @@ static const struct myoption opts[] = { "dhcp-prefix-class", 1, 0, LOPT_PREF_CLSS }, #endif { "force-fast-ra", 0, 0, LOPT_FAST_RA }, + { "dhcp-relay", 1, 0, LOPT_RELAY }, { NULL, 0, 0, 0 } }; @@ -389,6 +391,7 @@ static struct { { LOPT_DHCP_FQDN, OPT_DHCP_FQDN, NULL, gettext_noop("Use only fully qualified domain names for DHCP clients."), NULL }, { LOPT_GEN_NAMES, ARG_DUP, "[=tag:]", gettext_noop("Generate hostnames based on MAC address for nameless clients."), NULL}, { LOPT_PROXY, ARG_DUP, "[=]...", gettext_noop("Use these DHCP relays as full proxies."), NULL }, + { LOPT_RELAY, ARG_DUP, ",[,]", gettext_noop("Relay DHCP requests to a remote server"), NULL}, { LOPT_CNAME, ARG_DUP, ",", gettext_noop("Specify alias name for LOCAL DNS name."), NULL }, { LOPT_PXE_PROMT, ARG_DUP, ",[]", gettext_noop("Prompt to send to PXE clients."), NULL }, { LOPT_PXE_SERV, ARG_DUP, "", gettext_noop("Boot service for PXE menu."), NULL }, @@ -3178,6 +3181,31 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma arg = comma; } break; + + case LOPT_RELAY: /* --dhcp-relay */ + { + struct dhcp_relay *new = opt_malloc(sizeof(struct dhcp_relay)); + comma = split(arg); + new->interface = opt_string_alloc(split(comma)); + new->iface_index = 0; + if (inet_pton(AF_INET, arg, &new->local) && inet_pton(AF_INET, comma, &new->server)) + { + new->next = daemon->relay4; + daemon->relay4 = new; + } +#ifdef HAVE_DHCP6 + else if (inet_pton(AF_INET6, arg, &new->local) && inet_pton(AF_INET6, comma, &new->server)) + { + new->next = daemon->relay6; + daemon->relay6 = new; + } +#endif + else + ret_err(_("Bad dhcp-relay")); + + break; + } + #endif #ifdef HAVE_DHCP6 diff --git a/src/outpacket.c b/src/outpacket.c index 7f11cd3..9d64c01 100644 --- a/src/outpacket.c +++ b/src/outpacket.c @@ -70,9 +70,9 @@ void *put_opt6(void *data, size_t len) { void *p; - if ((p = expand(len))) + if ((p = expand(len)) && data) memcpy(p, data, len); - + return p; } diff --git a/src/rfc3315.c b/src/rfc3315.c index e1292fb..f0e9982 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -155,7 +155,8 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** return 0; /* copy header stuff into reply message and set type to reply */ - outmsgtypep = put_opt6(inbuff, 34); + if (!(outmsgtypep = put_opt6(inbuff, 34))) + return 0; *outmsgtypep = DHCP6RELAYREPL; /* look for relay options and set tags if found. */ @@ -252,7 +253,8 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh state.tags = &v6_id; /* copy over transaction-id, and save pointer to message type */ - outmsgtypep = put_opt6(inbuff, 4); + if (!(outmsgtypep = put_opt6(inbuff, 4))) + return 0; start_opts = save_counter(-1); state.xid = outmsgtypep[3] | outmsgtypep[2] << 8 | outmsgtypep[1] << 16; @@ -1912,4 +1914,118 @@ static unsigned int opt6_uint(unsigned char *opt, int offset, int size) return ret; } +void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id) +{ + /* ->local is same value for all relays on ->current chain */ + + struct all_addr from; + unsigned char *header; + unsigned char *inbuff = daemon->dhcp_packet.iov_base; + int msg_type = *inbuff; + int hopcount; + struct in6_addr multicast; + + inet_pton(AF_INET6, ALL_SERVERS, &multicast); + + /* source address == relay address */ + from.addr.addr6 = relay->local.addr.addr6; + + /* Get hop count from nested relayed message */ + if (msg_type == DHCP6RELAYFORW) + hopcount = *((unsigned char *)inbuff+1) + 1; + else + hopcount = 0; + + /* RFC 3315 HOP_COUNT_LIMIT */ + if (hopcount > 32) + return; + + save_counter(0); + + if ((header = put_opt6(NULL, 34))) + { + int o; + + header[0] = DHCP6RELAYFORW; + header[1] = hopcount; + memcpy(&header[2], &relay->local.addr.addr6, IN6ADDRSZ); + memcpy(&header[18], peer_address, IN6ADDRSZ); + + o = new_opt6(OPTION6_RELAY_MSG); + put_opt6(inbuff, sz); + end_opt6(o); + + for (; relay; relay = relay->current) + { + union mysockaddr to; + + to.sa.sa_family = AF_INET6; + to.in6.sin6_addr = relay->server.addr.addr6; + to.in6.sin6_port = htons(DHCPV6_SERVER_PORT); + to.in6.sin6_flowinfo = 0; + to.in6.sin6_scope_id = 0; + + if (IN6_ARE_ADDR_EQUAL(&relay->server.addr.addr6, &multicast)) + { + int multicast_iface; + if (!relay->interface || strchr(relay->interface, '*') || + (multicast_iface = if_nametoindex(relay->interface)) == 0 || + setsockopt(daemon->dhcp6fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, &multicast_iface, sizeof(multicast_iface)) == -1) + my_syslog(MS_DHCP | LOG_ERR, _("Cannot multicast to DHCPv6 server without correct interface")); + } + + send_from(daemon->dhcp6fd, 0, daemon->outpacket.iov_base, save_counter(0), &to, &from, 0); + + if (option_bool(OPT_LOG_OPTS)) + { + inet_ntop(AF_INET6, &relay->local, daemon->addrbuff, ADDRSTRLEN); + inet_ntop(AF_INET6, &relay->server, daemon->namebuff, ADDRSTRLEN); + my_syslog(MS_DHCP | LOG_INFO, _("DHCP relay %s -> %s"), daemon->addrbuff, daemon->namebuff); + } + + /* Save this for replies */ + relay->iface_index = scope_id; + } + } +} + +unsigned short relay_reply6(struct sockaddr_in6 *peer, ssize_t sz, char *arrival_interface) +{ + struct dhcp_relay *relay; + struct in6_addr link; + unsigned char *inbuff = daemon->dhcp_packet.iov_base; + + /* must have at least msg_type+hopcount+link_address+peer_address+minimal size option + which is 1 + 1 + 16 + 16 + 2 + 2 = 38 */ + + if (sz < 38 || *inbuff != DHCP6RELAYREPL) + return 0; + + memcpy(&link, &inbuff[2], IN6ADDRSZ); + + for (relay = daemon->relay6; relay; relay = relay->next) + if (IN6_ARE_ADDR_EQUAL(&link, &relay->local.addr.addr6) && + (!relay->interface || wildcard_match(relay->interface, arrival_interface))) + break; + + save_counter(0); + + if (relay) + { + void *opt, *opts = inbuff + 34; + void *end = inbuff + sz; + for (opt = opts; opt; opt = opt6_next(opt, end)) + if (opt6_type(opt) == OPTION6_RELAY_MSG && opt6_len(opt) > 0) + { + int encap_type = *((unsigned char *)opt6_ptr(opt, 0)); + put_opt6(opt6_ptr(opt, 0), opt6_len(opt)); + memcpy(&peer->sin6_addr, &inbuff[18], IN6ADDRSZ); + peer->sin6_scope_id = relay->iface_index; + return encap_type == DHCP6RELAYREPL ? DHCPV6_SERVER_PORT : DHCPV6_CLIENT_PORT; + } + } + + return 0; +} + #endif From 0c38719fe02beea2b58bed38fdd98a8d1af98120 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 5 Sep 2013 10:21:12 +0100 Subject: [PATCH 02/67] Don't crash with empty tag: in dhcp-range. --- src/option.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/option.c b/src/option.c index b12ca39..74f3110 100644 --- a/src/option.c +++ b/src/option.c @@ -2337,7 +2337,9 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma struct dhcp_netid *tt = opt_malloc(sizeof (struct dhcp_netid)); tt->net = opt_string_alloc(arg+4); tt->next = new->filter; - new->filter = tt; + /* ignore empty tag */ + if (tt->net) + new->filter = tt; } else { From 397542b213ab4071734f1cdf4cc914d87100456f Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 5 Sep 2013 11:27:34 +0100 Subject: [PATCH 03/67] Fix bug resulting in tight-loop when new interfaces arrive. --- src/network.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/network.c b/src/network.c index 46e49ce..8e62538 100644 --- a/src/network.c +++ b/src/network.c @@ -443,7 +443,7 @@ static int iface_allowed_v4(struct in_addr local, int if_index, char *label, int enumerate_interfaces(int reset) { static struct addrlist *spare = NULL; - static int done = 0; + static int done = 0, active = 0; struct iface_param param; int errsave, ret = 1; struct addrlist *addr, *tmp; @@ -451,18 +451,21 @@ int enumerate_interfaces(int reset) /* Do this max once per select cycle - also inhibits netlink socket use in TCP child processes. */ - + if (reset) { done = 0; return 1; } - if (done) + if (done || active) return 1; done = 1; + /* protect against recusive calls from iface_enumerate(); */ + active = 1; + if ((param.fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1) return 0; @@ -504,7 +507,8 @@ int enumerate_interfaces(int reset) errno = errsave; spare = param.spare; - + active = 0; + return ret; } From 0932f9c08ba001ac753d758c5982cb44cf5b3ca3 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 5 Sep 2013 11:30:30 +0100 Subject: [PATCH 04/67] CHANGELOG update. --- CHANGELOG | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 3fa133c..36ee428 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -103,6 +103,9 @@ version 2.67 Add --dhcp-relay config option. + Fix crash with empty tag: in --dhcp-range. Thanks to + Kaspar Schleiser for the bug report. + version 2.66 Add the ability to act as an authoritative DNS From 831b5ba12b41deaf1847a7567326f54bb24d0e53 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 5 Sep 2013 15:36:25 +0100 Subject: [PATCH 05/67] Debian resolvconf script update. --- debian/changelog | 1 + debian/resolvconf | 15 +++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/debian/changelog b/debian/changelog index f0ddd66..20f0a7d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ dnsmasq (2.67-1) unstable; urgency=low * New upstream. + * Update resolvconf script. (closes: #720732) -- Simon Kelley Wed, 4 Aug 2013 14:53:22 +0000 diff --git a/debian/resolvconf b/debian/resolvconf index 80f3a64..c15cb29 100644 --- a/debian/resolvconf +++ b/debian/resolvconf @@ -16,8 +16,7 @@ set -e RUN_DIR="/var/run/dnsmasq" RSLVRLIST_FILE="${RUN_DIR}/resolv.conf" TMP_FILE="${RSLVRLIST_FILE}_new.$$" -MY_RECORD_NAME="lo.dnsmasq" -DNSCRYPT_RECORD_NAME="lo.dnscrypt" +MY_NAME_FOR_RESOLVCONF="dnsmasq" [ -x /usr/sbin/dnsmasq ] || exit 0 [ -x /lib/resolvconf/list-records ] || exit 1 @@ -46,14 +45,14 @@ if [ ! -d "$RUN_DIR" ] && ! mkdir --parents --mode=0755 "$RUN_DIR" ; then fi RSLVCNFFILES="" -for F in $(/lib/resolvconf/list-records --after "$MY_RECORD_NAME") ; do +for F in $(/lib/resolvconf/list-records --after "lo.$MY_NAME_FOR_RESOLVCONF") ; do case "$F" in - "$MY_RECORD_NAME") - # Omit + "lo.$MY_NAME_FOR_RESOLVCONF") + # Omit own record ;; - "$DNSCRYPT_RECORD_NAME") - # Dnscrypt, I only have eyes for you - RSLVCNFFILES="$DNSCRYPT_RECORD_NAME" + lo.*) + # Include no more records after one for a local nameserver + RSLVCNFFILES="${RSLVCNFFILES:+$RSLVCNFFILES }$F" break ;; *) From 10ae7b50f246466860043fc05812b83eeb440e59 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 5 Sep 2013 20:08:01 +0100 Subject: [PATCH 06/67] Don't use BINDTODEVICE on DHCP socket when relaying. --- src/dnsmasq.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 4663591..5c65f81 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -237,16 +237,17 @@ int main (int argc, char **argv) #if defined(HAVE_LINUX_NETWORK) && defined(HAVE_DHCP) /* after enumerate_interfaces() */ - if (daemon->dhcp || daemon->relay4) + if (daemon->dhcp) { - bindtodevice(daemon->dhcpfd); + if (!daemon->relay4) + bindtodevice(daemon->dhcpfd); if (daemon->enable_pxe) bindtodevice(daemon->pxefd); } #endif #if defined(HAVE_LINUX_NETWORK) && defined(HAVE_DHCP6) - if (daemon->doing_dhcp6 || daemon->relay6) + if (daemon->doing_dhcp6 && !daemon->relay6) bindtodevice(daemon->dhcp6fd); #endif } From 6acef73052a6d394372b15056d36282df9df2b45 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 9 Sep 2013 15:21:39 +0100 Subject: [PATCH 07/67] Sponsorhip details in CHANGELOG. --- CHANGELOG | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 36ee428..30f8ead 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -101,7 +101,8 @@ version 2.67 (provide TFTP to the same interfaces we provide DHCP to) is retained. Thanks to Lonnie Abelbeck for the suggestion. - Add --dhcp-relay config option. + Add --dhcp-relay config option. Many thanks to vtsl.net + for sponsoring this development. Fix crash with empty tag: in --dhcp-range. Thanks to Kaspar Schleiser for the bug report. From 02ed24d351bff14e9ebdbea17ccbac0ce5be5a1a Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 9 Sep 2013 18:06:45 +0100 Subject: [PATCH 08/67] Add gitversion Debian build option. --- bld/get-version | 2 +- debian/readme | 4 +++- debian/rules | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/bld/get-version b/bld/get-version index 15e5051..c246a3c 100755 --- a/bld/get-version +++ b/bld/get-version @@ -12,7 +12,7 @@ # first. This favours, eg v2.63 over 2.63rc6. if which git >/dev/null 2>&1 && [ -d $1/.git ]; then - cd $1; git describe + cd $1; git describe | sed 's/^v//' elif grep '\$Format:%d\$' $1/VERSION >/dev/null 2>&1; then # unsubstituted VERSION, but no git available. echo UNKNOWN diff --git a/debian/readme b/debian/readme index cb5f7c9..73705d8 100644 --- a/debian/readme +++ b/debian/readme @@ -64,7 +64,9 @@ Notes on configuring dnsmasq as packaged for Debian. noi18n : omit translations and internationalisation support. noidn : omit international domain name support, must be combined with noi18n to be effective. - + gitversion : set the version of the produced packages from the + git-derived versioning information on the source, + rather the the debian changelog. (9) Dnsmasq comes as three packages - dnsmasq-utils, dnsmasq-base and dnsmasq. Dnsmasq-base provides the dnsmasq executable and diff --git a/debian/rules b/debian/rules index e658683..4ad2dd8 100755 --- a/debian/rules +++ b/debian/rules @@ -23,6 +23,11 @@ TARGET = install-i18n DEB_BUILD_ARCH_OS := $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS) +# Force package version based on git tags. +ifneq (,$(filter gitversion,$(DEB_BUILD_OPTIONS))) + PACKAGE_VERSION = $(shell bld/get-version `pwd` | sed 's/[a-z]/~&/; s/$$/-1/; s/^/-v/') +endif + ifeq (,$(filter nodbus,$(DEB_BUILD_OPTIONS))) COPTS += -DHAVE_DBUS endif @@ -103,7 +108,7 @@ binary-indep: checkroot install -m 644 debian/insserv debian/daemon/etc/insserv.conf.d/dnsmasq ln -s $(package) debian/daemon/usr/share/doc/dnsmasq cd debian/daemon && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums - dpkg-gencontrol -pdnsmasq -Pdebian/daemon + dpkg-gencontrol $(PACKAGE_VERSION) -pdnsmasq -Pdebian/daemon chown -R root.root debian/daemon chmod -R g-ws debian/daemon dpkg --build debian/daemon .. @@ -151,7 +156,7 @@ ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) endif cd debian/base && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums dpkg-shlibdeps debian/base/usr/sbin/dnsmasq - dpkg-gencontrol -pdnsmasq-base -Pdebian/base + dpkg-gencontrol $(PACKAGE_VERSION) -pdnsmasq-base -Pdebian/base chown -R root.root debian/base chmod -R g-ws debian/base dpkg --build debian/base .. @@ -178,7 +183,7 @@ ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) endif cd debian/utils && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums dpkg-shlibdeps -Tdebian/utils-substvars debian/utils/usr/bin/dhcp_release debian/utils/usr/bin/dhcp_lease_time - dpkg-gencontrol -Tdebian/utils-substvars -pdnsmasq-utils -Pdebian/utils + dpkg-gencontrol $(PACKAGE_VERSION) -Tdebian/utils-substvars -pdnsmasq-utils -Pdebian/utils chown -R root.root debian/utils chmod -R g-ws debian/utils dpkg --build debian/utils .. From 65e7912d311bcbc3b9243818fa2f0d83c50ea1ab Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 11 Sep 2013 10:01:31 +0100 Subject: [PATCH 09/67] Debian: depend on binary not source verions for dnsmasq-dnsmasq_base dependency. --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 3f673a3..f25bbdb 100644 --- a/debian/control +++ b/debian/control @@ -7,7 +7,7 @@ Standards-Version: 3.9.3 Package: dnsmasq Architecture: all -Depends: netbase, dnsmasq-base(>= ${source:Version}) +Depends: netbase, dnsmasq-base(>= ${binary:Version}) Suggests: resolvconf Conflicts: resolvconf (<<1.15) Description: Small caching DNS proxy and DHCP/TFTP server From aa985beeefe480c9166a14d184e4ccb219715c3a Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 11 Sep 2013 10:28:39 +0100 Subject: [PATCH 10/67] Fix a couple of warnings in debian package build. --- debian/rules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/rules b/debian/rules index 4ad2dd8..b6671f4 100755 --- a/debian/rules +++ b/debian/rules @@ -108,7 +108,7 @@ binary-indep: checkroot install -m 644 debian/insserv debian/daemon/etc/insserv.conf.d/dnsmasq ln -s $(package) debian/daemon/usr/share/doc/dnsmasq cd debian/daemon && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums - dpkg-gencontrol $(PACKAGE_VERSION) -pdnsmasq -Pdebian/daemon + dpkg-gencontrol $(PACKAGE_VERSION) -T -pdnsmasq -Pdebian/daemon chown -R root.root debian/daemon chmod -R g-ws debian/daemon dpkg --build debian/daemon .. @@ -155,7 +155,7 @@ ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) strip -R .note -R .comment debian/base/usr/sbin/dnsmasq endif cd debian/base && find . -type f ! -regex '.*DEBIAN/.*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums - dpkg-shlibdeps debian/base/usr/sbin/dnsmasq + dpkg-shlibdeps --warnings=1 debian/base/usr/sbin/dnsmasq dpkg-gencontrol $(PACKAGE_VERSION) -pdnsmasq-base -Pdebian/base chown -R root.root debian/base chmod -R g-ws debian/base From c2d8d3ffc4b4a0fa47684066b1b24de42a604d72 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 11 Sep 2013 15:52:22 +0100 Subject: [PATCH 11/67] Debian packing. remove unwanted '-' in version number using gitversion. --- debian/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/rules b/debian/rules index b6671f4..ca1f0c9 100755 --- a/debian/rules +++ b/debian/rules @@ -25,7 +25,7 @@ DEB_BUILD_ARCH_OS := $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS) # Force package version based on git tags. ifneq (,$(filter gitversion,$(DEB_BUILD_OPTIONS))) - PACKAGE_VERSION = $(shell bld/get-version `pwd` | sed 's/[a-z]/~&/; s/$$/-1/; s/^/-v/') + PACKAGE_VERSION = $(shell bld/get-version `pwd` | sed 's/[a-z]/~&/; s/-/./g; s/$$/-1/; s/^/-v/';) endif ifeq (,$(filter nodbus,$(DEB_BUILD_OPTIONS))) From ceae52df15b48060f9e48b3d46cc56bd62a01dac Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 12 Sep 2013 15:05:47 +0100 Subject: [PATCH 12/67] Add "baseline" and "bloatcheck" makefile targets --- .gitignore | 1 + CHANGELOG | 4 ++ Makefile | 25 ++++++--- bld/bloat-o-meter | 130 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 154 insertions(+), 6 deletions(-) create mode 100755 bld/bloat-o-meter diff --git a/.gitignore b/.gitignore index f357b6e..fcdbcbd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ src/*.o src/*.mo src/dnsmasq.pot src/dnsmasq +src/dnsmasq_baseline src/.configured contrib/wrt/dhcp_lease_time contrib/wrt/dhcp_release diff --git a/CHANGELOG b/CHANGELOG index 30f8ead..83f1192 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -107,6 +107,10 @@ version 2.67 Fix crash with empty tag: in --dhcp-range. Thanks to Kaspar Schleiser for the bug report. + Add "baseline" and "bloatcheck" makefile targets, for + revealing size changes during development. Thanks to + Vladislav Grishenko for the patch. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/Makefile b/Makefile index fe63aee..b4178bc 100644 --- a/Makefile +++ b/Makefile @@ -77,10 +77,14 @@ all : $(BUILDDIR) build_libs="$(dbus_libs) $(idn_libs) $(ct_libs) $(lua_libs) $(sunos_libs)" \ -f $(top)/Makefile dnsmasq -clean : - rm -f *~ $(BUILDDIR)/*.mo contrib/*/*~ */*~ $(BUILDDIR)/*.pot +mostly_clean : + rm -f $(BUILDDIR)/*.mo $(BUILDDIR)/*.pot rm -f $(BUILDDIR)/.configured $(BUILDDIR)/*.o $(BUILDDIR)/dnsmasq.a $(BUILDDIR)/dnsmasq - rm -rf core */core + +clean : mostly_clean + rm -f $(BUILDDIR)/dnsmasq_baseline + rm -f core */core + rm -f *~ contrib/*/*~ */*~ install : all install-common @@ -113,6 +117,16 @@ merge : $(BUILDDIR): mkdir -p $(BUILDDIR) +# rules below are helpers for size tracking + +baseline : mostly_clean all + @cd $(BUILDDIR) && \ + mv dnsmasq dnsmasq_baseline + +bloatcheck : $(BUILDDIR)/dnsmasq_baseline mostly_clean all + @cd $(BUILDDIR) && \ + $(top)/bld/bloat-o-meter dnsmasq_baseline dnsmasq; \ + size dnsmasq_baseline dnsmasq # rules below are targets in recusive makes with cwd=$(BUILDDIR) @@ -126,7 +140,7 @@ $(objs:.o=.c) $(hdrs): .c.o: $(CC) $(CFLAGS) $(COPTS) $(i18n) $(build_cflags) $(RPM_OPT_FLAGS) -c $< -dnsmasq : .configured $(hdrs) $(objs) +dnsmasq : .configured $(hdrs) $(objs) $(CC) $(LDFLAGS) -o $@ $(objs) $(build_libs) $(LIBS) dnsmasq.pot : $(objs:.o=.c) $(hdrs) @@ -135,5 +149,4 @@ dnsmasq.pot : $(objs:.o=.c) $(hdrs) %.mo : $(top)/$(PO)/%.po dnsmasq.pot $(MSGMERGE) -o - $(top)/$(PO)/$*.po dnsmasq.pot | $(MSGFMT) -o $*.mo - - -.PHONY : all clean install install-common all-i18n install-i18n merge +.PHONY : all clean mostly_clean install install-common all-i18n install-i18n merge baseline bloatcheck diff --git a/bld/bloat-o-meter b/bld/bloat-o-meter new file mode 100755 index 0000000..6db2a5e --- /dev/null +++ b/bld/bloat-o-meter @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# +# Copyright 2004 Matt Mackall +# +# Inspired by perl Bloat-O-Meter (c) 1997 by Andi Kleen +# +# This software may be used and distributed according to the terms +# of the GNU General Public License, incorporated herein by reference. + +import sys, os#, re + +def usage(): + sys.stderr.write("usage: %s [-t] file1 file2\n" % sys.argv[0]) + sys.exit(-1) + +f1, f2 = (None, None) +flag_timing, dashes = (False, False) + +for f in sys.argv[1:]: + if f.startswith("-"): + if f == "--": # sym_args + dashes = True + break + if f == "-t": # timings + flag_timing = True + else: + if not os.path.exists(f): + sys.stderr.write("Error: file '%s' does not exist\n" % f) + usage() + if f1 is None: + f1 = f + elif f2 is None: + f2 = f +if flag_timing: + import time +if f1 is None or f2 is None: + usage() + +sym_args = " ".join(sys.argv[3 + flag_timing + dashes:]) +def getsizes(file): + sym, alias, lut = {}, {}, {} + for l in os.popen("readelf -W -s %s %s" % (sym_args, file)).readlines(): + l = l.strip() + if not (len(l) and l[0].isdigit() and len(l.split()) == 8): + continue + num, value, size, typ, bind, vis, ndx, name = l.split() + if ndx == "UND": continue # skip undefined + if typ in ["SECTION", "FILES"]: continue # skip sections and files + if "." in name: name = "static." + name.split(".")[0] + value = int(value, 16) + size = int(size, 16) if size.startswith('0x') else int(size) + if vis != "DEFAULT" and bind != "GLOBAL": # see if it is an alias + alias[(value, size)] = {"name" : name} + else: + sym[name] = {"addr" : value, "size": size} + lut[(value, size)] = 0 + for addr, sz in iter(alias.keys()): + # If the non-GLOBAL sym has an implementation elsewhere then + # it's an alias, disregard it. + if not (addr, sz) in lut: + # If this non-GLOBAL sym does not have an implementation at + # another address, then treat it as a normal symbol. + sym[alias[(addr, sz)]["name"]] = {"addr" : addr, "size": sz} + for l in os.popen("readelf -W -S " + file).readlines(): + x = l.split() + if len(x)<6: continue + # Should take these into account too! + #if x[1] not in [".text", ".rodata", ".symtab", ".strtab"]: continue + if x[1] not in [".rodata"]: continue + sym[x[1]] = {"addr" : int(x[3], 16), "size" : int(x[5], 16)} + return sym + +if flag_timing: + start_t1 = int(time.time() * 1e9) +old = getsizes(f1) +if flag_timing: + end_t1 = int(time.time() * 1e9) + start_t2 = int(time.time() * 1e9) +new = getsizes(f2) +if flag_timing: + end_t2 = int(time.time() * 1e9) + start_t3 = int(time.time() * 1e9) +grow, shrink, add, remove, up, down = 0, 0, 0, 0, 0, 0 +delta, common = [], {} + +for name in iter(old.keys()): + if name in new: + common[name] = 1 + +for name in old: + if name not in common: + remove += 1 + sz = old[name]["size"] + down += sz + delta.append((-sz, name)) + +for name in new: + if name not in common: + add += 1 + sz = new[name]["size"] + up += sz + delta.append((sz, name)) + +for name in common: + d = new[name].get("size", 0) - old[name].get("size", 0) + if d>0: grow, up = grow+1, up+d + elif d<0: shrink, down = shrink+1, down-d + else: + continue + delta.append((d, name)) + +delta.sort() +delta.reverse() +if flag_timing: + end_t3 = int(time.time() * 1e9) + +print("%-48s %7s %7s %+7s" % ("function", "old", "new", "delta")) +for d, n in delta: + if d: + old_sz = old.get(n, {}).get("size", "-") + new_sz = new.get(n, {}).get("size", "-") + print("%-48s %7s %7s %+7d" % (n, old_sz, new_sz, d)) +print("-"*78) +total="(add/remove: %s/%s grow/shrink: %s/%s up/down: %s/%s)%%sTotal: %s bytes"\ + % (add, remove, grow, shrink, up, -down, up-down) +print(total % (" "*(80-len(total)))) +if flag_timing: + print("\n%d/%d; %d Parse origin/new; processing nsecs" % + (end_t1-start_t1, end_t2-start_t2, end_t3-start_t3)) + print("total nsecs: %d" % (end_t3-start_t1)) From c8f2dd8b5363b9026ae3de6ce84b5b64df657892 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 13 Sep 2013 11:22:55 +0100 Subject: [PATCH 13/67] Cope with DHCPv6 REQUESTs without address options. --- CHANGELOG | 3 +++ src/rfc3315.c | 57 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 83f1192..14ac3d6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -111,6 +111,9 @@ version 2.67 revealing size changes during development. Thanks to Vladislav Grishenko for the patch. + Cope with DHCPv6 clients which send REQUESTs without + address options - treat them as SOLICIT with rapid commit. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/src/rfc3315.c b/src/rfc3315.c index f0e9982..12df5cf 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -21,7 +21,7 @@ struct state { unsigned char *clid; - int clid_len, iaid, ia_type, interface, hostname_auth; + int clid_len, iaid, ia_type, interface, hostname_auth, lease_allocate; char *client_hostname, *hostname, *domain, *send_domain; struct dhcp_context *context; struct in6_addr *link_address; @@ -55,7 +55,7 @@ static void mark_context_used(struct state *state, struct dhcp_context *context, static void mark_config_used(struct dhcp_context *context, struct in6_addr *addr); static int check_address(struct state *state, struct in6_addr *addr); static void add_address(struct state *state, struct dhcp_context *context, unsigned int lease_time, void *ia_option, - unsigned int *min_time, struct in6_addr *addr, int update_lease, time_t now); + unsigned int *min_time, struct in6_addr *addr, time_t now); static void update_leases(struct state *state, struct dhcp_context *context, struct in6_addr *addr, unsigned int lease_time, time_t now); static int add_local_addrs(struct dhcp_context *context); static struct dhcp_netid *add_options(struct state *state, struct in6_addr *fallback, struct dhcp_context *context, int do_refresh); @@ -226,6 +226,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh state.end = inbuff + sz; state.clid = NULL; state.clid_len = 0; + state.lease_allocate = 0; state.context_tags = NULL; state.tags = tags; state.link_address = link_address; @@ -536,27 +537,29 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh { default: return 0; - - + + case DHCP6SOLICIT: { - void *rapid_commit = opt6_find(state.packet_options, state.end, OPTION6_RAPID_COMMIT, 0); int address_assigned = 0; /* tags without all prefix-class tags */ struct dhcp_netid *solicit_tags = tagif; struct dhcp_context *c; - - if (rapid_commit) + + *outmsgtypep = DHCP6ADVERTISE; + + if (opt6_find(state.packet_options, state.end, OPTION6_RAPID_COMMIT, 0)) { + *outmsgtypep = DHCP6REPLY; + state.lease_allocate = 1; o = new_opt6(OPTION6_RAPID_COMMIT); end_opt6(o); } - - /* set reply message type */ - *outmsgtypep = rapid_commit ? DHCP6REPLY : DHCP6ADVERTISE; - - log6_packet(&state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL); + log6_packet(&state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL); + + request_no_address: + if (ignore) return 0; @@ -671,7 +674,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) state.send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, c, lease_time, ia_option, &min_time, req_addr, rapid_commit != NULL, now); + add_address(&state, c, lease_time, ia_option, &min_time, req_addr, now); mark_context_used(&state, context, req_addr); get_context_tag(&state, c); address_assigned = 1; @@ -695,7 +698,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) state.send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, c, lease_time, NULL, &min_time, &addr, rapid_commit != NULL, now); + add_address(&state, c, lease_time, NULL, &min_time, &addr, now); mark_context_used(&state, context, &addr); get_context_tag(&state, c); address_assigned = 1; @@ -712,7 +715,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) state.send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, c, c->lease_time, NULL, &min_time, req_addr, rapid_commit != NULL, now); + add_address(&state, c, c->lease_time, NULL, &min_time, req_addr, now); mark_context_used(&state, context, req_addr); get_context_tag(&state, c); address_assigned = 1; @@ -726,7 +729,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) state.send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, c, c->lease_time, NULL, &min_time, &addr, rapid_commit != NULL, now); + add_address(&state, c, c->lease_time, NULL, &min_time, &addr, now); mark_context_used(&state, context, &addr); get_context_tag(&state, c); address_assigned = 1; @@ -766,9 +769,11 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh case DHCP6REQUEST: { int address_assigned = 0; - + int start = save_counter(-1); + /* set reply message type */ *outmsgtypep = DHCP6REPLY; + state.lease_allocate = 1; log6_packet(&state, "DHCPREQUEST", NULL, ignore ? _("ignored") : NULL); @@ -783,7 +788,15 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (!check_ia(&state, opt, &ia_end, &ia_option)) continue; - + + if (!ia_option) + { + /* If we get a request with a IA_*A without addresses, treat it exactly like + a SOLICT with rapid commit set. */ + save_counter(start); + goto request_no_address; + } + o = build_ia(&state, &t1cntr); for (; ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) @@ -829,7 +842,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) state.send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, dynamic, lease_time, ia_option, &min_time, req_addr, 1, now); + add_address(&state, dynamic, lease_time, ia_option, &min_time, req_addr, now); get_context_tag(&state, dynamic); address_assigned = 1; } @@ -1505,7 +1518,7 @@ static void end_ia(int t1cntr, unsigned int min_time, int do_fuzz) } static void add_address(struct state *state, struct dhcp_context *context, unsigned int lease_time, void *ia_option, - unsigned int *min_time, struct in6_addr *addr, int do_update, time_t now) + unsigned int *min_time, struct in6_addr *addr, time_t now) { unsigned int valid_time = 0, preferred_time = 0; int o = new_opt6(OPTION6_IAADDR); @@ -1535,7 +1548,7 @@ static void add_address(struct state *state, struct dhcp_context *context, unsig end_opt6(o); - if (do_update) + if (state->lease_allocate) update_leases(state, context, addr, valid_time, now); if ((lease = lease6_find_by_addr(addr, 128, 0))) @@ -1559,7 +1572,7 @@ static void add_address(struct state *state, struct dhcp_context *context, unsig } } - log6_packet(state, do_update ? "DHCPREPLY" : "DHCPADVERTISE", addr, state->hostname); + log6_packet(state, state->lease_allocate ? "DHCPREPLY" : "DHCPADVERTISE", addr, state->hostname); } From 89500e31f199e9ae1eadc86213b911ff44d30d6f Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 20 Sep 2013 16:29:20 +0100 Subject: [PATCH 14/67] Support MAC addresses in dhcp-host and dhcp-mac for DHCPv6. --- CHANGELOG | 6 ++ man/dnsmasq.8 | 16 +++--- src/dhcp-common.c | 104 ++++++++++++++++++++++++++++++++++ src/dhcp.c | 83 --------------------------- src/dhcp6-protocol.h | 1 + src/dhcp6.c | 131 ++++++++++++++++++++++++++++--------------- src/dnsmasq.c | 2 +- src/dnsmasq.h | 66 +++++++++++----------- src/helper.c | 98 ++++++++++++++++---------------- src/lease.c | 72 ++++++++++++++---------- src/network.c | 4 +- src/option.c | 1 + src/radv.c | 14 +++-- src/rfc3315.c | 90 +++++++++++++++++++++++------ 14 files changed, 417 insertions(+), 271 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 14ac3d6..d001a3d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -114,6 +114,12 @@ version 2.67 Cope with DHCPv6 clients which send REQUESTs without address options - treat them as SOLICIT with rapid commit. + Support identification of clients by MAC address in + DHCPv6. When using a relay, the relay must support RFC + 6939 for this to work. It always works for directly + connected clients. Thanks to Vladislav Grishenko + for prompting this feature. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index 05733b8..e313d54 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -766,7 +766,8 @@ the same subnet as some valid dhcp-range. For subnets which don't need a pool of dynamically allocated addresses, use the "static" keyword in the dhcp-range declaration. -It is allowed to use client identifiers rather than +It is allowed to use client identifiers (called client +DUID in IPv6-land rather than hardware addresses to identify hosts by prefixing with 'id:'. Thus: .B --dhcp-host=id:01:02:03:04,..... refers to the host with client identifier 01:02:03:04. It is also @@ -781,11 +782,12 @@ IPv6 addresses may contain only the host-identifier part: .B --dhcp-host=laptop,[::56] in which case they act as wildcards in constructed dhcp ranges, with the appropriate network part inserted. -Note that in IPv6 DHCP, the hardware address is not normally -available, so a client must be identified by client-id (called client -DUID in IPv6-land) or hostname. +Note that in IPv6 DHCP, the hardware address may not be +available, though it normally is for direct-connected clients, or +clients using DHCP relays which support RFC 6939. -The special option id:* means "ignore any client-id + +For DHCPv4, the special option id:* means "ignore any client-id and use MAC addresses only." This is useful when a client presents a client-id sometimes but not others. @@ -1033,7 +1035,7 @@ this to set a different printer server for hosts in the class "accounts" than for hosts in the class "engineering". .TP .B \-4, --dhcp-mac=set:, -(IPv4 only) Map from a MAC address to a tag. The MAC address may include +Map from a MAC address to a tag. The MAC address may include wildcards. For example .B --dhcp-mac=set:3com,01:34:23:*:*:* will set the tag "3com" for any host whose MAC address matches the pattern. @@ -1339,7 +1341,7 @@ every call to the script. DNSMASQ_IAID containing the IAID for the lease. If the lease is a temporary allocation, this is prefixed to 'T'. - +DNSMASQ_MAC containing the MAC address of the client, if known. Note that the supplied hostname, vendorclass and userclass data is only supplied for diff --git a/src/dhcp-common.c b/src/dhcp-common.c index 939f25a..7b37daf 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -253,6 +253,110 @@ int match_bytes(struct dhcp_opt *o, unsigned char *p, int len) return 0; } +int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type) +{ + struct hwaddr_config *conf_addr; + + for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next) + if (conf_addr->wildcard_mask == 0 && + conf_addr->hwaddr_len == len && + (conf_addr->hwaddr_type == type || conf_addr->hwaddr_type == 0) && + memcmp(conf_addr->hwaddr, hwaddr, len) == 0) + return 1; + + return 0; +} + +static int is_config_in_context(struct dhcp_context *context, struct dhcp_config *config) +{ + if (!context) /* called via find_config() from lease_update_from_configs() */ + return 1; + + if (!(context->flags & CONTEXT_V6)) + { + if (!(config->flags & CONFIG_ADDR)) + return 1; + + for (; context; context = context->current) + if (is_same_net(config->addr, context->start, context->netmask)) + return 1; + } +#ifdef HAVE_DHCP6 + else + { + if (!(config->flags & CONFIG_ADDR6) || (config->flags & CONFIG_WILDCARD)) + return 1; + + for (; context; context = context->current) + if (is_same_net6(&config->addr6, &context->start6, context->prefix)) + return 1; + } +#endif + + return 0; +} + +struct dhcp_config *find_config(struct dhcp_config *configs, + struct dhcp_context *context, + unsigned char *clid, int clid_len, + unsigned char *hwaddr, int hw_len, + int hw_type, char *hostname) +{ + int count, new; + struct dhcp_config *config, *candidate; + struct hwaddr_config *conf_addr; + + if (clid) + for (config = configs; config; config = config->next) + if (config->flags & CONFIG_CLID) + { + if (config->clid_len == clid_len && + memcmp(config->clid, clid, clid_len) == 0 && + is_config_in_context(context, config)) + return config; + + /* dhcpcd prefixes ASCII client IDs by zero which is wrong, but we try and + cope with that here */ + if (!(context->flags & CONTEXT_V6) && *clid == 0 && config->clid_len == clid_len-1 && + memcmp(config->clid, clid+1, clid_len-1) == 0 && + is_config_in_context(context, config)) + return config; + } + + + if (hwaddr) + for (config = configs; config; config = config->next) + if (config_has_mac(config, hwaddr, hw_len, hw_type) && + is_config_in_context(context, config)) + return config; + + if (hostname && context) + for (config = configs; config; config = config->next) + if ((config->flags & CONFIG_NAME) && + hostname_isequal(config->hostname, hostname) && + is_config_in_context(context, config)) + return config; + + + if (!hwaddr) + return NULL; + + /* use match with fewest wildcard octets */ + for (candidate = NULL, count = 0, config = configs; config; config = config->next) + if (is_config_in_context(context, config)) + for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next) + if (conf_addr->wildcard_mask != 0 && + conf_addr->hwaddr_len == hw_len && + (conf_addr->hwaddr_type == hw_type || conf_addr->hwaddr_type == 0) && + (new = memcmp_masked(conf_addr->hwaddr, hwaddr, hw_len, conf_addr->wildcard_mask)) > count) + { + count = new; + candidate = config; + } + + return candidate; +} + void dhcp_update_configs(struct dhcp_config *configs) { /* Some people like to keep all static IP addresses in /etc/hosts. diff --git a/src/dhcp.c b/src/dhcp.c index 573de5b..67a82b5 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -749,89 +749,6 @@ int address_allocate(struct dhcp_context *context, return 0; } -static int is_addr_in_context(struct dhcp_context *context, struct dhcp_config *config) -{ - if (!context) /* called via find_config() from lease_update_from_configs() */ - return 1; - if (!(config->flags & CONFIG_ADDR)) - return 1; - for (; context; context = context->current) - if (is_same_net(config->addr, context->start, context->netmask)) - return 1; - - return 0; -} - -int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type) -{ - struct hwaddr_config *conf_addr; - - for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next) - if (conf_addr->wildcard_mask == 0 && - conf_addr->hwaddr_len == len && - (conf_addr->hwaddr_type == type || conf_addr->hwaddr_type == 0) && - memcmp(conf_addr->hwaddr, hwaddr, len) == 0) - return 1; - - return 0; -} - -struct dhcp_config *find_config(struct dhcp_config *configs, - struct dhcp_context *context, - unsigned char *clid, int clid_len, - unsigned char *hwaddr, int hw_len, - int hw_type, char *hostname) -{ - int count, new; - struct dhcp_config *config, *candidate; - struct hwaddr_config *conf_addr; - - if (clid) - for (config = configs; config; config = config->next) - if (config->flags & CONFIG_CLID) - { - if (config->clid_len == clid_len && - memcmp(config->clid, clid, clid_len) == 0 && - is_addr_in_context(context, config)) - return config; - - /* dhcpcd prefixes ASCII client IDs by zero which is wrong, but we try and - cope with that here */ - if (*clid == 0 && config->clid_len == clid_len-1 && - memcmp(config->clid, clid+1, clid_len-1) == 0 && - is_addr_in_context(context, config)) - return config; - } - - - for (config = configs; config; config = config->next) - if (config_has_mac(config, hwaddr, hw_len, hw_type) && - is_addr_in_context(context, config)) - return config; - - if (hostname && context) - for (config = configs; config; config = config->next) - if ((config->flags & CONFIG_NAME) && - hostname_isequal(config->hostname, hostname) && - is_addr_in_context(context, config)) - return config; - - /* use match with fewest wildcard octets */ - for (candidate = NULL, count = 0, config = configs; config; config = config->next) - if (is_addr_in_context(context, config)) - for (conf_addr = config->hwaddr; conf_addr; conf_addr = conf_addr->next) - if (conf_addr->wildcard_mask != 0 && - conf_addr->hwaddr_len == hw_len && - (conf_addr->hwaddr_type == hw_type || conf_addr->hwaddr_type == 0) && - (new = memcmp_masked(conf_addr->hwaddr, hwaddr, hw_len, conf_addr->wildcard_mask)) > count) - { - count = new; - candidate = config; - } - - return candidate; -} - void dhcp_read_ethers(void) { FILE *f = fopen(ETHERSFILE, "r"); diff --git a/src/dhcp6-protocol.h b/src/dhcp6-protocol.h index c4eef35..f8e98ec 100644 --- a/src/dhcp6-protocol.h +++ b/src/dhcp6-protocol.h @@ -59,6 +59,7 @@ #define OPTION6_REMOTE_ID 37 #define OPTION6_SUBSCRIBER_ID 38 #define OPTION6_FQDN 39 +#define OPTION6_CLIENT_MAC 79 /* replace this with the real number when allocated. defining this also enables the relevant code. */ diff --git a/src/dhcp6.c b/src/dhcp6.c index 35bb748..527d797 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -18,6 +18,8 @@ #ifdef HAVE_DHCP6 +#include + struct iface_param { struct dhcp_context *current; struct dhcp_relay *relay; @@ -25,10 +27,17 @@ struct iface_param { int ind, addr_match; }; +struct mac_param { + struct in6_addr *target; + unsigned char mac[DHCP_CHADDR_MAX]; + unsigned int maclen; +}; + + static int complete_context6(struct in6_addr *local, int prefix, int scope, int if_index, int flags, unsigned int preferred, unsigned int valid, void *vparam); - +static int find_mac(int family, char *addrp, char *mac, size_t maclen, void *parmv); static int make_duid1(int index, unsigned int type, char *mac, size_t maclen, void *parm); void dhcp6_init(void) @@ -90,6 +99,7 @@ void dhcp6_packet(time_t now) struct dhcp_context *context; struct dhcp_relay *relay; struct iface_param parm; + struct mac_param mac_param; struct cmsghdr *cmptr; struct msghdr msg; int if_index = 0; @@ -102,6 +112,7 @@ void dhcp6_packet(time_t now) struct ifreq ifr; struct iname *tmp; unsigned short port; + struct in6_addr dst_addr; msg.msg_control = control_u.control6; msg.msg_controllen = sizeof(control_u); @@ -124,6 +135,7 @@ void dhcp6_packet(time_t now) p.c = CMSG_DATA(cmptr); if_index = p.p->ipi6_ifindex; + dst_addr = p.p->ipi6_addr; } if (!indextoname(daemon->dhcp6fd, if_index, ifr.ifr_name)) @@ -131,7 +143,8 @@ void dhcp6_packet(time_t now) if ((port = relay_reply6(&from, sz, ifr.ifr_name)) == 0) { - + int i; + for (tmp = daemon->if_except; tmp; tmp = tmp->next) if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) return; @@ -166,7 +179,48 @@ void dhcp6_packet(time_t now) if (!iface_enumerate(AF_INET6, &parm, complete_context6)) return; + + /* Recieving a packet from a host does not populate the neighbour + cache, so we send a ping to prompt neighbour discovery if we can't + find the sender. Repeat a few times in case of packet loss. */ + for (i = 0; i < 5; i++) + { + struct timespec ts; + struct ping_packet *ping; + struct sockaddr_in6 addr; + + mac_param.target = &from.sin6_addr; + mac_param.maclen = 0; + + iface_enumerate(AF_UNSPEC, &mac_param, find_mac); + + if (mac_param.maclen != 0) + break; + + save_counter(0); + ping = expand(sizeof(struct ping_packet)); + ping->type = ICMP6_ECHO_REQUEST; + ping->code = 0; + ping->identifier = 1; + ping->sequence_no = 1; + + memset(&addr, 0, sizeof(addr)); +#ifdef HAVE_SOCKADDR_SA_LEN + addr.sin6_len = sizeof(struct sockaddr_in6); +#endif + addr.sin6_family = AF_INET6; + addr.sin6_port = htons(IPPROTO_ICMPV6); + addr.sin6_addr = from.sin6_addr; + + sendto(daemon->icmp6fd, daemon->outpacket.iov_base, save_counter(0), 0, + (struct sockaddr *)&addr, sizeof(addr)); + + ts.tv_sec = 0; + ts.tv_nsec = 100000000; /* 100ms */ + nanosleep(&ts, NULL); + } + if (daemon->if_names || daemon->if_addrs) { @@ -180,7 +234,15 @@ void dhcp6_packet(time_t now) if (parm.relay) { - relay_upstream6(parm.relay, sz, &from.sin6_addr, from.sin6_scope_id); + /* Ignore requests sent to the ALL_SERVERS multicast address for relay when + we're listening there for DHCPv6 server reasons. */ + struct in6_addr all_servers; + + inet_pton(AF_INET6, ALL_SERVERS, &all_servers); + + if (!IN6_ARE_ADDR_EQUAL(&dst_addr, &all_servers)) + relay_upstream6(parm.relay, sz, &from.sin6_addr, from.sin6_scope_id, + mac_param.maclen == 0 ? NULL : &mac_param.mac[0], mac_param.maclen, ARPHRD_ETHER); return; } @@ -191,7 +253,8 @@ void dhcp6_packet(time_t now) lease_prune(NULL, now); /* lose any expired leases */ port = dhcp6_reply(parm.current, if_index, ifr.ifr_name, &parm.fallback, - sz, IN6_IS_ADDR_MULTICAST(&from.sin6_addr), now); + sz, IN6_IS_ADDR_MULTICAST(&from.sin6_addr), now, + mac_param.maclen == 0 ? NULL : &mac_param.mac[0], mac_param.maclen, ARPHRD_ETHER); lease_update_file(now); lease_update_dns(0); @@ -210,6 +273,24 @@ void dhcp6_packet(time_t now) } } +static int find_mac(int family, char *addrp, char *mac, size_t maclen, void *parmv) +{ + struct mac_param *parm = parmv; + + if (family == AF_INET6 && IN6_ARE_ADDR_EQUAL(parm->target, addrp)) + { + if (maclen <= DHCP_CHADDR_MAX) + { + parm->maclen = maclen; + memcpy(parm->mac, mac, maclen); + } + + return 0; /* found, abort */ + } + + return 1; +} + static int complete_context6(struct in6_addr *local, int prefix, int scope, int if_index, int flags, unsigned int preferred, unsigned int valid, void *vparam) @@ -435,48 +516,6 @@ int config_valid(struct dhcp_config *config, struct dhcp_context *context, struc return 0; } -static int is_config_in_context6(struct dhcp_context *context, struct dhcp_config *config) -{ - if (!(config->flags & CONFIG_ADDR6) || - (config->flags & CONFIG_WILDCARD)) - - return 1; - - for (; context; context = context->current) - if (is_same_net6(&config->addr6, &context->start6, context->prefix)) - return 1; - - return 0; -} - - -struct dhcp_config *find_config6(struct dhcp_config *configs, - struct dhcp_context *context, - unsigned char *duid, int duid_len, - char *hostname) -{ - struct dhcp_config *config; - - if (duid) - for (config = configs; config; config = config->next) - if (config->flags & CONFIG_CLID) - { - if (config->clid_len == duid_len && - memcmp(config->clid, duid, duid_len) == 0 && - is_config_in_context6(context, config)) - return config; - } - - if (hostname && context) - for (config = configs; config; config = config->next) - if ((config->flags & CONFIG_NAME) && - hostname_isequal(config->hostname, hostname) && - is_config_in_context6(context, config)) - return config; - - return NULL; -} - void make_duid(time_t now) { if (daemon->duid_config) diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 5c65f81..8dcb1d4 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -202,7 +202,7 @@ int main (int argc, char **argv) dhcp_init(); # ifdef HAVE_DHCP6 - if (daemon->doing_ra) + if (daemon->doing_ra || daemon->doing_dhcp6 || daemon->relay6) ra_init(now); if (daemon->doing_dhcp6 || daemon->relay6) diff --git a/src/dnsmasq.h b/src/dnsmasq.h index b1a1644..2d9a3a5 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -539,13 +539,15 @@ struct dhcp_lease { #ifdef HAVE_BROKEN_RTC unsigned int length; #endif - int hwaddr_len, hwaddr_type; /* hw_type used for iaid in v6 */ - unsigned char hwaddr[DHCP_CHADDR_MAX]; /* also IPv6 address */ + int hwaddr_len, hwaddr_type; + unsigned char hwaddr[DHCP_CHADDR_MAX]; struct in_addr addr, override, giaddr; unsigned char *extradata; unsigned int extradata_len, extradata_size; int last_interface; #ifdef HAVE_DHCP6 + struct in6_addr addr6; + int iaid; struct slaac_address { struct in6_addr addr, local; time_t ping_time; @@ -717,24 +719,25 @@ struct dhcp_context { struct dhcp_context *next, *current; }; -#define CONTEXT_STATIC 1 -#define CONTEXT_NETMASK 2 -#define CONTEXT_BRDCAST 4 -#define CONTEXT_PROXY 8 -#define CONTEXT_RA_ONLY 16 -#define CONTEXT_RA_DONE 32 -#define CONTEXT_RA_NAME 64 -#define CONTEXT_RA_STATELESS 128 -#define CONTEXT_DHCP 256 -#define CONTEXT_DEPRECATE 512 -#define CONTEXT_TEMPLATE 1024 /* create contexts using addresses */ -#define CONTEXT_CONSTRUCTED 2048 -#define CONTEXT_GC 4096 -#define CONTEXT_RA 8192 -#define CONTEXT_CONF_USED 16384 -#define CONTEXT_USED 32768 -#define CONTEXT_NOAUTH 65536 -#define CONTEXT_OLD 131072 +#define CONTEXT_STATIC (1u<<0) +#define CONTEXT_NETMASK (1u<<1) +#define CONTEXT_BRDCAST (1u<<2) +#define CONTEXT_PROXY (1u<<3) +#define CONTEXT_RA_ONLY (1u<<4) +#define CONTEXT_RA_DONE (1u<<5) +#define CONTEXT_RA_NAME (1u<<6) +#define CONTEXT_RA_STATELESS (1u<<7) +#define CONTEXT_DHCP (1u<<8) +#define CONTEXT_DEPRECATE (1u<<9) +#define CONTEXT_TEMPLATE (1u<<10) /* create contexts using addresses */ +#define CONTEXT_CONSTRUCTED (1u<<11) +#define CONTEXT_GC (1u<<12) +#define CONTEXT_RA (1u<<13) +#define CONTEXT_CONF_USED (1u<<14) +#define CONTEXT_USED (1u<<15) +#define CONTEXT_NOAUTH (1u<<16) +#define CONTEXT_OLD (1u<<17) +#define CONTEXT_V6 (1u<<18) struct ping_result { @@ -1072,12 +1075,6 @@ struct dhcp_context *narrow_context(struct dhcp_context *context, int address_allocate(struct dhcp_context *context, struct in_addr *addrp, unsigned char *hwaddr, int hw_len, struct dhcp_netid *netids, time_t now); -int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type); -struct dhcp_config *find_config(struct dhcp_config *configs, - struct dhcp_context *context, - unsigned char *clid, int clid_len, - unsigned char *hwaddr, int hw_len, - int hw_type, char *hostname); void dhcp_read_ethers(void); struct dhcp_config *config_find_by_address(struct dhcp_config *configs, struct in_addr addr); char *host_from_dns(struct in_addr addr); @@ -1099,6 +1096,7 @@ struct dhcp_lease *lease6_find_by_addr(struct in6_addr *net, int prefix, u64 add u64 lease_find_max_addr6(struct dhcp_context *context); void lease_ping_reply(struct in6_addr *sender, unsigned char *packet, char *interface); void lease_update_slaac(time_t now); +void lease_set_iaid(struct dhcp_lease *lease, int iaid); #endif void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr, unsigned char *clid, int hw_len, int hw_type, int clid_len, time_t now, int force); @@ -1210,10 +1208,6 @@ struct dhcp_context *address6_valid(struct dhcp_context *context, struct in6_addr *taddr, struct dhcp_netid *netids, int plain_range); -struct dhcp_config *find_config6(struct dhcp_config *configs, - struct dhcp_context *context, - unsigned char *duid, int duid_len, - char *hostname); struct dhcp_config *config_find_by_address6(struct dhcp_config *configs, struct in6_addr *net, int prefix, u64 addr); void make_duid(time_t now); @@ -1223,8 +1217,10 @@ void dhcp_construct_contexts(time_t now); /* rfc3315.c */ #ifdef HAVE_DHCP6 unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name, - struct in6_addr *fallback, size_t sz, int is_multicast, time_t now); -void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id); + struct in6_addr *fallback, size_t sz, int is_multicast, time_t now, + unsigned char *mac, unsigned int mac_len, unsigned int mac_type); +void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id, + unsigned char *mac, unsigned int mac_len, unsigned int mac_type); unsigned short relay_reply6( struct sockaddr_in6 *peer, ssize_t sz, char *arrival_interface); #endif @@ -1246,6 +1242,12 @@ int lookup_dhcp_opt(int prot, char *name); int lookup_dhcp_len(int prot, int val); char *option_string(int prot, unsigned int opt, unsigned char *val, int opt_len, char *buf, int buf_len); +struct dhcp_config *find_config(struct dhcp_config *configs, + struct dhcp_context *context, + unsigned char *clid, int clid_len, + unsigned char *hwaddr, int hw_len, + int hw_type, char *hostname); +int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type); #ifdef HAVE_LINUX_NETWORK void bindtodevice(int fd); #endif diff --git a/src/helper.c b/src/helper.c index ab691b7..65410f5 100644 --- a/src/helper.c +++ b/src/helper.c @@ -60,10 +60,13 @@ struct script_data unsigned int length; #else time_t expires; +#endif +#ifdef HAVE_DHCP6 + struct in6_addr addr6; + int iaid, vendorclass_count; #endif unsigned char hwaddr[DHCP_CHADDR_MAX]; char interface[IF_NAMESIZE]; - }; static struct script_data *buf = NULL; @@ -215,20 +218,17 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) continue; - if (!is6) + /* stringify MAC into dhcp_buff */ + p = daemon->dhcp_buff; + if (data.hwaddr_type != ARPHRD_ETHER || data.hwaddr_len == 0) + p += sprintf(p, "%.2x-", data.hwaddr_type); + for (i = 0; (i < data.hwaddr_len) && (i < DHCP_CHADDR_MAX); i++) { - /* stringify MAC into dhcp_buff */ - p = daemon->dhcp_buff; - if (data.hwaddr_type != ARPHRD_ETHER || data.hwaddr_len == 0) - p += sprintf(p, "%.2x-", data.hwaddr_type); - for (i = 0; (i < data.hwaddr_len) && (i < DHCP_CHADDR_MAX); i++) - { - p += sprintf(p, "%.2x", data.hwaddr[i]); - if (i != data.hwaddr_len - 1) - p += sprintf(p, ":"); - } + p += sprintf(p, "%.2x", data.hwaddr[i]); + if (i != data.hwaddr_len - 1) + p += sprintf(p, ":"); } - + /* supplied data may just exceed normal buffer (unlikely) */ if ((data.hostname_len + data.ed_len + data.clid_len) > MAXDNAME && !(alloc_buff = buf = malloc(data.hostname_len + data.ed_len + data.clid_len))) @@ -239,32 +239,25 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) continue; /* CLID into packet */ - if (!is6) - for (p = daemon->packet, i = 0; i < data.clid_len; i++) - { - p += sprintf(p, "%.2x", buf[i]); - if (i != data.clid_len - 1) + for (p = daemon->packet, i = 0; i < data.clid_len; i++) + { + p += sprintf(p, "%.2x", buf[i]); + if (i != data.clid_len - 1) p += sprintf(p, ":"); - } + } + #ifdef HAVE_DHCP6 - else + if (is6) { /* or IAID and server DUID for IPv6 */ - sprintf(daemon->dhcp_buff3, "%s%u", data.flags & LEASE_TA ? "T" : "", data.hwaddr_type); - for (p = daemon->packet, i = 0; i < daemon->duid_len; i++) + sprintf(daemon->dhcp_buff3, "%s%u", data.flags & LEASE_TA ? "T" : "", data.iaid); + for (p = daemon->dhcp_packet.iov_base, i = 0; i < daemon->duid_len; i++) { p += sprintf(p, "%.2x", daemon->duid[i]); if (i != daemon->duid_len - 1) p += sprintf(p, ":"); } - /* duid not MAC for IPv6 */ - for (p = daemon->dhcp_buff, i = 0; i < data.clid_len; i++) - { - p += sprintf(p, "%.2x", buf[i]); - if (i != data.clid_len - 1) - p += sprintf(p, ":"); - } } #endif @@ -293,7 +286,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) inet_ntop(AF_INET, &data.addr, daemon->addrbuff, ADDRSTRLEN); #ifdef HAVE_DHCP6 else - inet_ntop(AF_INET6, &data.hwaddr, daemon->addrbuff, ADDRSTRLEN); + inet_ntop(AF_INET6, &data.addr6, daemon->addrbuff, ADDRSTRLEN); #endif /* file length */ @@ -329,9 +322,9 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) if (is6) { - lua_pushstring(lua, daemon->dhcp_buff); - lua_setfield(lua, -2, "client_duid"); lua_pushstring(lua, daemon->packet); + lua_setfield(lua, -2, "client_duid"); + lua_pushstring(lua, daemon->dhcp_packet.iov_base); lua_setfield(lua, -2, "server_duid"); lua_pushstring(lua, daemon->dhcp_buff3); lua_setfield(lua, -2, "iaid"); @@ -375,12 +368,16 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) if (!is6) buf = grab_extradata_lua(buf, end, "vendor_class"); #ifdef HAVE_DHCP6 - else - for (i = 0; i < data.hwaddr_len; i++) - { - sprintf(daemon->dhcp_buff2, "vendor_class%i", i); - buf = grab_extradata_lua(buf, end, daemon->dhcp_buff2); - } + else if (data.vendorclass_count != 0) + { + sprintf(daemon->dhcp_buff2, "vendor_class_id"); + buf = grab_extradata_lua(buf, end, daemon->dhcp_buff2); + for (i = 0; i < data.vendorclass_count - 1; i++) + { + sprintf(daemon->dhcp_buff2, "vendor_class%i", i); + buf = grab_extradata_lua(buf, end, daemon->dhcp_buff2); + } + } #endif buf = grab_extradata_lua(buf, end, "supplied_hostname"); @@ -423,7 +420,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) lua_setfield(lua, -2, "old_hostname"); } - if (!is6) + if (!is6 || data.hwaddr_len != 0) { lua_pushstring(lua, daemon->dhcp_buff); lua_setfield(lua, -2, "mac_address"); @@ -476,11 +473,15 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) if (data.action != ACTION_TFTP) { +#ifdef HAVE_DHCP6 if (is6) { my_setenv("DNSMASQ_IAID", daemon->dhcp_buff3, &err); - my_setenv("DNSMASQ_SERVER_DUID", daemon->packet, &err); + my_setenv("DNSMASQ_SERVER_DUID", daemon->dhcp_packet.iov_base, &err); + if (data.hwaddr_len != 0) + my_setenv("DNSMASQ_MAC", daemon->dhcp_buff, &err); } +#endif if (!is6 && data.clid_len != 0) my_setenv("DNSMASQ_CLIENT_ID", daemon->packet, &err); @@ -507,10 +508,10 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) #ifdef HAVE_DHCP6 else { - if (data.hwaddr_len != 0) + if (data.vendorclass_count != 0) { buf = grab_extradata(buf, end, "DNSMASQ_VENDOR_CLASS_ID", &err); - for (i = 0; i < data.hwaddr_len - 1; i++) + for (i = 0; i < data.vendorclass_count - 1; i++) { sprintf(daemon->dhcp_buff2, "DNSMASQ_VENDOR_CLASS%i", i); buf = grab_extradata(buf, end, daemon->dhcp_buff2, &err); @@ -570,7 +571,8 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) { execl(daemon->lease_change_command, p ? p+1 : daemon->lease_change_command, - action_str, daemon->dhcp_buff, daemon->addrbuff, hostname, (char*)NULL); + action_str, is6 ? daemon->packet : daemon->dhcp_buff, + daemon->addrbuff, hostname, (char*)NULL); err = errno; } /* failed, send event so the main process logs the problem */ @@ -656,8 +658,6 @@ void queue_script(int action, struct dhcp_lease *lease, char *hostname, time_t n unsigned int hostname_len = 0, clid_len = 0, ed_len = 0; int fd = daemon->dhcpfd; #ifdef HAVE_DHCP6 - int is6 = !!(lease->flags & (LEASE_TA | LEASE_NA)); - if (!daemon->dhcp) fd = daemon->dhcp6fd; #endif @@ -678,11 +678,11 @@ void queue_script(int action, struct dhcp_lease *lease, char *hostname, time_t n buf->action = action; buf->flags = lease->flags; #ifdef HAVE_DHCP6 - if (is6) - buf->hwaddr_len = lease->vendorclass_count; - else + buf->vendorclass_count = lease->vendorclass_count; + buf->addr6 = lease->addr6; + buf->iaid = lease->iaid; #endif - buf->hwaddr_len = lease->hwaddr_len; + buf->hwaddr_len = lease->hwaddr_len; buf->hwaddr_type = lease->hwaddr_type; buf->clid_len = clid_len; buf->ed_len = ed_len; diff --git a/src/lease.c b/src/lease.c index b85cf57..7033370 100644 --- a/src/lease.c +++ b/src/lease.c @@ -108,6 +108,7 @@ void lease_init(time_t now) { char *s = daemon->dhcp_buff2; int lease_type = LEASE_NA; + int iaid; if (s[0] == 'T') { @@ -115,12 +116,12 @@ void lease_init(time_t now) s++; } - hw_type = strtoul(s, NULL, 10); + iaid = strtoul(s, NULL, 10); if ((lease = lease6_allocate(&addr.addr.addr6, lease_type))) { - lease_set_hwaddr(lease, NULL, (unsigned char *)daemon->packet, 0, hw_type, clid_len, now, 0); - + lease_set_hwaddr(lease, NULL, (unsigned char *)daemon->packet, 0, 0, clid_len, now, 0); + lease_set_iaid(lease, iaid); if (strcmp(daemon->dhcp_buff, "*") != 0) lease_set_hostname(lease, daemon->dhcp_buff, 0, get_domain6((struct in6_addr *)lease->hwaddr), NULL); } @@ -187,10 +188,12 @@ void lease_update_from_configs(void) char *name; for (lease = leases; lease; lease = lease->next) - if ((config = find_config(daemon->dhcp_conf, NULL, lease->clid, lease->clid_len, - lease->hwaddr, lease->hwaddr_len, lease->hwaddr_type, NULL)) && - (config->flags & CONFIG_NAME) && - (!(config->flags & CONFIG_ADDR) || config->addr.s_addr == lease->addr.s_addr)) + if (lease->flags & (LEASE_TA | LEASE_NA)) + continue; + else if ((config = find_config(daemon->dhcp_conf, NULL, lease->clid, lease->clid_len, + lease->hwaddr, lease->hwaddr_len, lease->hwaddr_type, NULL)) && + (config->flags & CONFIG_NAME) && + (!(config->flags & CONFIG_ADDR) || config->addr.s_addr == lease->addr.s_addr)) lease_set_hostname(lease, config->hostname, 1, get_domain(lease->addr), NULL); else if ((name = host_from_dns(lease->addr))) lease_set_hostname(lease, name, 1, get_domain(lease->addr), NULL); /* updates auth flag only */ @@ -277,10 +280,10 @@ void lease_update_file(time_t now) ourprintf(&err, "%lu ", (unsigned long)lease->expires); #endif - inet_ntop(AF_INET6, lease->hwaddr, daemon->addrbuff, ADDRSTRLEN); + inet_ntop(AF_INET6, &lease->addr6, daemon->addrbuff, ADDRSTRLEN); ourprintf(&err, "%s%u %s ", (lease->flags & LEASE_TA) ? "T" : "", - lease->hwaddr_type, daemon->addrbuff); + lease->iaid, daemon->addrbuff); ourprintf(&err, "%s ", lease->hostname ? lease->hostname : "*"); if (lease->clid && lease->clid_len != 0) @@ -376,7 +379,7 @@ static int find_interface_v6(struct in6_addr *local, int prefix, for (lease = leases; lease; lease = lease->next) if ((lease->flags & (LEASE_TA | LEASE_NA))) - if (is_same_net6(local, (struct in6_addr *)&lease->hwaddr, prefix)) + if (is_same_net6(local, &lease->addr6, prefix)) lease_set_interface(lease, if_index, *((time_t *)vparam)); return 1; @@ -463,12 +466,12 @@ void lease_update_dns(int force) if (lease->fqdn) cache_add_dhcp_entry(lease->fqdn, prot, - prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->hwaddr, + prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6, lease->expires); if (!option_bool(OPT_DHCP_FQDN) && lease->hostname) cache_add_dhcp_entry(lease->hostname, prot, - prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->hwaddr, + prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6, lease->expires); } @@ -564,10 +567,10 @@ struct dhcp_lease *lease6_find(unsigned char *clid, int clid_len, for (lease = leases; lease; lease = lease->next) { - if (!(lease->flags & lease_type) || lease->hwaddr_type != iaid) + if (!(lease->flags & lease_type) || lease->iaid != iaid) continue; - if (memcmp(lease->hwaddr, addr, IN6ADDRSZ) != 0) + if (!IN6_ARE_ADDR_EQUAL(&lease->addr6, addr)) continue; if ((clid_len != lease->clid_len || @@ -604,7 +607,7 @@ struct dhcp_lease *lease6_find_by_client(struct dhcp_lease *first, int lease_typ if (lease->flags & LEASE_USED) continue; - if (!(lease->flags & lease_type) || lease->hwaddr_type != iaid) + if (!(lease->flags & lease_type) || lease->iaid != iaid) continue; if ((clid_len != lease->clid_len || @@ -626,8 +629,8 @@ struct dhcp_lease *lease6_find_by_addr(struct in6_addr *net, int prefix, u64 add if (!(lease->flags & (LEASE_TA | LEASE_NA))) continue; - if (is_same_net6((struct in6_addr *)lease->hwaddr, net, prefix) && - (prefix == 128 || addr6part((struct in6_addr *)lease->hwaddr) == addr)) + if (is_same_net6(&lease->addr6, net, prefix) && + (prefix == 128 || addr6part(&lease->addr6) == addr)) return lease; } @@ -646,11 +649,11 @@ u64 lease_find_max_addr6(struct dhcp_context *context) if (!(lease->flags & (LEASE_TA | LEASE_NA))) continue; - if (is_same_net6((struct in6_addr *)lease->hwaddr, &context->start6, 64) && - addr6part((struct in6_addr *)lease->hwaddr) > addr6part(&context->start6) && - addr6part((struct in6_addr *)lease->hwaddr) <= addr6part(&context->end6) && - addr6part((struct in6_addr *)lease->hwaddr) > addr) - addr = addr6part((struct in6_addr *)lease->hwaddr); + if (is_same_net6(&lease->addr6, &context->start6, 64) && + addr6part(&lease->addr6) > addr6part(&context->start6) && + addr6part(&lease->addr6) <= addr6part(&context->end6) && + addr6part(&lease->addr6) > addr) + addr = addr6part(&lease->addr6); } return addr; @@ -692,6 +695,7 @@ static struct dhcp_lease *lease_allocate(void) #ifdef HAVE_BROKEN_RTC lease->length = 0xffffffff; /* illegal value */ #endif + lease->hwaddr_len = 256; /* illegal value */ lease->next = leases; leases = lease; @@ -705,11 +709,8 @@ struct dhcp_lease *lease4_allocate(struct in_addr addr) { struct dhcp_lease *lease = lease_allocate(); if (lease) - { - lease->addr = addr; - lease->hwaddr_len = 256; /* illegal value */ - } - + lease->addr = addr; + return lease; } @@ -720,8 +721,9 @@ struct dhcp_lease *lease6_allocate(struct in6_addr *addrp, int lease_type) if (lease) { - memcpy(lease->hwaddr, addrp, sizeof(*addrp)) ; + lease->addr6 = *addrp; lease->flags |= lease_type; + lease->iaid = 0; } return lease; @@ -758,6 +760,17 @@ void lease_set_expires(struct dhcp_lease *lease, unsigned int len, time_t now) #endif } +#ifdef HAVE_DHCP6 +void lease_set_iaid(struct dhcp_lease *lease, int iaid) +{ + if (lease->iaid != iaid) + { + lease->iaid = iaid; + lease->flags |= LEASE_CHANGED; + } +} +#endif + void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr, unsigned char *clid, int hw_len, int hw_type, int clid_len, time_t now, int force) @@ -779,9 +792,6 @@ void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr, lease->hwaddr_type = hw_type; lease->flags |= LEASE_CHANGED; file_dirty = 1; /* run script on change */ -#ifdef HAVE_DHCP6 - change = 1; -#endif } /* only update clid when one is available, stops packets diff --git a/src/network.c b/src/network.c index 8e62538..712d7ee 100644 --- a/src/network.c +++ b/src/network.c @@ -115,7 +115,9 @@ int iface_check(int family, struct all_addr *addr, char *name, int *auth) int ret = 1, match_addr = 0; /* Note: have to check all and not bail out early, so that we set the - "used" flags. */ + "used" flags. + + May be called with family == AF_LOCALto check interface by name only. */ if (auth) *auth = 0; diff --git a/src/option.c b/src/option.c index 74f3110..eb5f413 100644 --- a/src/option.c +++ b/src/option.c @@ -2404,6 +2404,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma #ifdef HAVE_DHCP6 else if (inet_pton(AF_INET6, a[0], &new->start6)) { + new->flags |= CONTEXT_V6; new->prefix = 64; /* default */ new->end6 = new->start6; new->next = daemon->dhcp6; diff --git a/src/radv.c b/src/radv.c index 32dc60d..d2b3977 100644 --- a/src/radv.c +++ b/src/radv.c @@ -70,10 +70,15 @@ void ra_init(time_t now) if ((context->flags & CONTEXT_RA_NAME)) break; + /* Need ICMP6 socket for transmission for DHCPv6 even when not doing RA. */ + ICMP6_FILTER_SETBLOCKALL(&filter); - ICMP6_FILTER_SETPASS(ND_ROUTER_SOLICIT, &filter); - if (context) - ICMP6_FILTER_SETPASS(ICMP6_ECHO_REPLY, &filter); + if (daemon->doing_ra) + { + ICMP6_FILTER_SETPASS(ND_ROUTER_SOLICIT, &filter); + if (context) + ICMP6_FILTER_SETPASS(ICMP6_ECHO_REPLY, &filter); + } if ((fd = socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) == -1 || getsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &hop_limit, &len) || @@ -89,7 +94,8 @@ void ra_init(time_t now) daemon->icmp6fd = fd; - ra_start_unsolicted(now, NULL); + if (daemon->doing_ra) + ra_start_unsolicted(now, NULL); } void ra_start_unsolicted(time_t now, struct dhcp_context *context) diff --git a/src/rfc3315.c b/src/rfc3315.c index 12df5cf..05e70ae 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -29,15 +29,19 @@ struct state { char *iface_name; void *packet_options, *end; struct dhcp_netid *tags, *context_tags; + unsigned char *mac; + unsigned int mac_len, mac_type; #ifdef OPTION6_PREFIX_CLASS struct prefix_class *send_prefix_class; #endif }; static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid **relay_tagsp, struct dhcp_context *context, - int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now); + int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now, + unsigned char *mac, unsigned int mac_len, unsigned int mac_type); static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dhcp_netid *tags, struct dhcp_context *context, - int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now); + int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now, + unsigned int mac_len, unsigned int mac_type, unsigned char *mac); static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_opts); static void log6_packet(struct state *state, char *type, struct in6_addr *addr, char *string); @@ -68,7 +72,8 @@ static void calculate_times(struct dhcp_context *context, unsigned int *min_time unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name, - struct in6_addr *fallback, size_t sz, int is_unicast, time_t now) + struct in6_addr *fallback, size_t sz, int is_unicast, time_t now, + unsigned char *mac, unsigned int mac_len, unsigned int mac_type) { struct dhcp_netid *relay_tags = NULL; struct dhcp_vendor *vendor; @@ -85,7 +90,9 @@ unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *if save_counter(0); - if (dhcp6_maybe_relay(NULL, &relay_tags, context, interface, iface_name, fallback, daemon->dhcp_packet.iov_base, sz, is_unicast, now)) + if (dhcp6_maybe_relay(NULL, &relay_tags, context, interface, iface_name, + fallback, daemon->dhcp_packet.iov_base, sz, is_unicast, now, + mac, mac_len, mac_type)) return msg_type == DHCP6RELAYFORW ? DHCPV6_SERVER_PORT : DHCPV6_CLIENT_PORT; return 0; @@ -93,7 +100,8 @@ unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *if /* This cost me blood to write, it will probably cost you blood to understand - srk. */ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid **relay_tagsp, struct dhcp_context *context, - int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now) + int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now, + unsigned char *mac, unsigned int mac_len, unsigned int mac_type) { void *end = inbuff + sz; void *opts = inbuff + 34; @@ -146,7 +154,8 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** return 0; } - return dhcp6_no_relay(msg_type, link_address, *relay_tagsp, context, interface, iface_name, fallback, inbuff, sz, is_unicast, now); + return dhcp6_no_relay(msg_type, link_address, *relay_tagsp, context, interface, iface_name, fallback, inbuff, + sz, is_unicast, now, mac_len, mac_type, mac); } /* must have at least msg_type+hopcount+link_address+peer_address+minimal size option @@ -182,6 +191,14 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** } } + /* RFC-6939 */ + if ((opt = opt6_find(opts, end, OPTION6_CLIENT_MAC, 3))) + { + mac = opt6_ptr(opt, 2); + mac_type = opt6_uint(opt, 0, 2); + mac_len = opt6_len(opt) - 2; + } + for (opt = opts; opt; opt = opt6_next(opt, end)) { int o = new_opt6(opt6_type(opt)); @@ -192,10 +209,12 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** memcpy(&link_address, inbuff + 2, IN6ADDRSZ); /* Not, zero is_unicast since that is now known to refer to the relayed packet, not the original sent by the client */ - if (!dhcp6_maybe_relay(&link_address, relay_tagsp, context, interface, iface_name, fallback, opt6_ptr(opt, 0), opt6_len(opt), 0, now)) + if (!dhcp6_maybe_relay(&link_address, relay_tagsp, context, interface, iface_name, fallback, + opt6_ptr(opt, 0), opt6_len(opt), 0, now, + mac, mac_len, mac_type)) return 0; } - else + else if (opt6_type(opt) != OPTION6_CLIENT_MAC) put_opt6(opt6_ptr(opt, 0), opt6_len(opt)); end_opt6(o); } @@ -204,7 +223,8 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** } static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dhcp_netid *tags, struct dhcp_context *context, - int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now) + int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now, + unsigned int mac_len, unsigned int mac_type, unsigned char *mac) { void *opt; int i, o, o1, start_opts; @@ -215,6 +235,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh unsigned char *outmsgtypep; struct dhcp_vendor *vendor; struct dhcp_context *context_tmp; + struct dhcp_mac *mac_opt; unsigned int ignore = 0; struct state state; #ifdef OPTION6_PREFIX_CLASS @@ -239,6 +260,9 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh state.client_hostname = NULL; state.iface_name = iface_name; state.fqdn_flags = 0x01; /* default to send if we recieve no FQDN option */ + state.mac = mac; + state.mac_len = mac_len; + state.mac_type = mac_type; #ifdef OPTION6_PREFIX_CLASS state.send_prefix_class = NULL; #endif @@ -393,6 +417,16 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh state.tags = opt_cfg->netid; } } + + if (mac_len != 0) + for (mac_opt = daemon->dhcp_macs; mac_opt; mac_opt = mac_opt->next) + if ((unsigned)mac_opt->hwaddr_len == mac_len && + ((unsigned)mac_opt->hwaddr_type == mac_type || mac_opt->hwaddr_type == 0) && + memcmp_masked(mac_opt->hwaddr, mac, mac_len, mac_opt->mask)) + { + mac_opt->netid.next = state.tags; + state.tags = &mac_opt->netid; + } if ((opt = opt6_find(state.packet_options, state.end, OPTION6_FQDN, 1))) { @@ -436,7 +470,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (state.clid) { - config = find_config6(daemon->dhcp_conf, context, state.clid, state.clid_len, NULL); + config = find_config(daemon->dhcp_conf, context, state.clid, state.clid_len, mac, mac_len, mac_type, NULL); if (have_config(config, CONFIG_NAME)) { @@ -456,7 +490,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh /* Search again now we have a hostname. Only accept configs without CLID here, (it won't match) to avoid impersonation by name. */ - struct dhcp_config *new = find_config6(daemon->dhcp_conf, context, NULL, 0, state.hostname); + struct dhcp_config *new = find_config(daemon->dhcp_conf, context, NULL, 0, NULL, 0, 0, state.hostname); if (new && !have_config(new, CONFIG_CLID) && !new->hwaddr) config = new; } @@ -708,7 +742,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh ltmp = NULL; while ((ltmp = lease6_find_by_client(ltmp, state.ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, state.clid, state.clid_len, state.iaid))) { - req_addr = (struct in6_addr *)ltmp->hwaddr; + req_addr = <mp->addr6; if ((c = address6_available(context, req_addr, solicit_tags, plain_range))) { #ifdef OPTION6_PREFIX_CLASS @@ -949,6 +983,9 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh calculate_times(this_context, &min_time, &valid_time, &preferred_time, lease_time); lease_set_expires(lease, valid_time, now); + /* Update MAC record in case it's new information. */ + if (mac_len != 0) + lease_set_hwaddr(lease, mac, state.clid, mac_len, mac_type, state.clid_len, now, 0); if (state.ia_type == OPTION6_IA_NA && state.hostname) { char *addr_domain = get_domain6(req_addr); @@ -1189,8 +1226,16 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh log_tags(tagif, state.xid); if (option_bool(OPT_LOG_OPTS)) - log6_opts(0, state.xid, daemon->outpacket.iov_base + start_opts, daemon->outpacket.iov_base + save_counter(-1)); - + { + if (mac_len != 0) + { + print_mac(daemon->dhcp_buff, mac, mac_len); + my_syslog(MS_DHCP | LOG_INFO, _("%u client MAC address: %s"), state.xid, daemon->dhcp_buff); + } + + log6_opts(0, state.xid, daemon->outpacket.iov_base + start_opts, daemon->outpacket.iov_base + save_counter(-1)); + } + return 1; } @@ -1609,7 +1654,7 @@ static int check_address(struct state *state, struct in6_addr *addr) if (lease->clid_len != state->clid_len || memcmp(lease->clid, state->clid, state->clid_len) != 0 || - lease->hwaddr_type != state->iaid) + lease->iaid != state->iaid) return 0; return 1; @@ -1690,7 +1735,8 @@ static void update_leases(struct state *state, struct dhcp_context *context, str if (lease) { lease_set_expires(lease, lease_time, now); - lease_set_hwaddr(lease, NULL, state->clid, 0, state->iaid, state->clid_len, now, 0); + lease_set_iaid(lease, state->iaid); + lease_set_hwaddr(lease, state->mac, state->clid, state->mac_len, state->mac_type, state->clid_len, now, 0); lease_set_interface(lease, state->interface, now); if (state->hostname && state->ia_type == OPTION6_IA_NA) { @@ -1927,7 +1973,8 @@ static unsigned int opt6_uint(unsigned char *opt, int offset, int size) return ret; } -void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id) +void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id, + unsigned char *mac, unsigned int mac_len, unsigned int mac_type ) { /* ->local is same value for all relays on ->current chain */ @@ -1963,6 +2010,15 @@ void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer header[1] = hopcount; memcpy(&header[2], &relay->local.addr.addr6, IN6ADDRSZ); memcpy(&header[18], peer_address, IN6ADDRSZ); + + /* RFC-6939 */ + if (mac) + { + o = new_opt6(OPTION6_CLIENT_MAC); + put_opt6_short(mac_type); + put_opt6(mac, mac_len); + end_opt6(o); + } o = new_opt6(OPTION6_RELAY_MSG); put_opt6(inbuff, sz); From c845f6eda51bfc7f47a4fa3302847dea0c715c24 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Sat, 21 Sep 2013 14:02:10 +0100 Subject: [PATCH 15/67] Fix compiler warnings. --- src/dhcp6.c | 2 ++ src/rfc3315.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/dhcp6.c b/src/dhcp6.c index 527d797..9ad8912 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -114,6 +114,8 @@ void dhcp6_packet(time_t now) unsigned short port; struct in6_addr dst_addr; + memset(&dst_addr, 0, sizeof(dst_addr)); + msg.msg_control = control_u.control6; msg.msg_controllen = sizeof(control_u); msg.msg_flags = 0; diff --git a/src/rfc3315.c b/src/rfc3315.c index 05e70ae..ee06353 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -577,7 +577,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh { int address_assigned = 0; /* tags without all prefix-class tags */ - struct dhcp_netid *solicit_tags = tagif; + struct dhcp_netid *solicit_tags; struct dhcp_context *c; *outmsgtypep = DHCP6ADVERTISE; @@ -593,7 +593,8 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh log6_packet(&state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL); request_no_address: - + solicit_tags = tagif; + if (ignore) return 0; From 8f51a29137866234f90baba80fa780d0394a6b3b Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Sat, 21 Sep 2013 14:07:12 +0100 Subject: [PATCH 16/67] Fix compiler warnings. --- src/dhcp6.c | 2 ++ src/rfc3315.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/dhcp6.c b/src/dhcp6.c index 527d797..9ad8912 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -114,6 +114,8 @@ void dhcp6_packet(time_t now) unsigned short port; struct in6_addr dst_addr; + memset(&dst_addr, 0, sizeof(dst_addr)); + msg.msg_control = control_u.control6; msg.msg_controllen = sizeof(control_u); msg.msg_flags = 0; diff --git a/src/rfc3315.c b/src/rfc3315.c index 05e70ae..ee06353 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -577,7 +577,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh { int address_assigned = 0; /* tags without all prefix-class tags */ - struct dhcp_netid *solicit_tags = tagif; + struct dhcp_netid *solicit_tags; struct dhcp_context *c; *outmsgtypep = DHCP6ADVERTISE; @@ -593,7 +593,8 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh log6_packet(&state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL); request_no_address: - + solicit_tags = tagif; + if (ignore) return 0; From d81b42d0674d161934a060bea5de1a44a8238376 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 23 Sep 2013 12:26:34 +0100 Subject: [PATCH 17/67] Prod neighbour discovery with ARP instead of PING. --- src/dhcp6.c | 17 +++++++++-------- src/radv-protocol.h | 7 +++++++ src/rfc3315.c | 34 ++++++++++++++++------------------ 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/dhcp6.c b/src/dhcp6.c index 9ad8912..5e151d6 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -183,13 +183,13 @@ void dhcp6_packet(time_t now) return; /* Recieving a packet from a host does not populate the neighbour - cache, so we send a ping to prompt neighbour discovery if we can't + cache, so we send a neighbour discovery request if we can't find the sender. Repeat a few times in case of packet loss. */ for (i = 0; i < 5; i++) { struct timespec ts; - struct ping_packet *ping; + struct neigh_packet *neigh; struct sockaddr_in6 addr; mac_param.target = &from.sin6_addr; @@ -201,12 +201,12 @@ void dhcp6_packet(time_t now) break; save_counter(0); - ping = expand(sizeof(struct ping_packet)); - ping->type = ICMP6_ECHO_REQUEST; - ping->code = 0; - ping->identifier = 1; - ping->sequence_no = 1; - + neigh = expand(sizeof(struct neigh_packet)); + neigh->type = ND_NEIGHBOR_SOLICIT; + neigh->code = 0; + neigh->reserved = 0; + neigh->target = from.sin6_addr; + memset(&addr, 0, sizeof(addr)); #ifdef HAVE_SOCKADDR_SA_LEN addr.sin6_len = sizeof(struct sockaddr_in6); @@ -214,6 +214,7 @@ void dhcp6_packet(time_t now) addr.sin6_family = AF_INET6; addr.sin6_port = htons(IPPROTO_ICMPV6); addr.sin6_addr = from.sin6_addr; + addr.sin6_scope_id = from.sin6_scope_id; sendto(daemon->icmp6fd, daemon->outpacket.iov_base, save_counter(0), 0, (struct sockaddr *)&addr, sizeof(addr)); diff --git a/src/radv-protocol.h b/src/radv-protocol.h index 1f0f88a..8d5b153 100644 --- a/src/radv-protocol.h +++ b/src/radv-protocol.h @@ -33,6 +33,13 @@ struct ra_packet { u32 retrans_time; }; +struct neigh_packet { + u8 type, code; + u16 checksum; + u16 reserved; + struct in6_addr target; +}; + struct prefix_opt { u8 type, len, prefix_len, flags; u32 valid_lifetime, preferred_lifetime, reserved; diff --git a/src/rfc3315.c b/src/rfc3315.c index ee06353..26dca71 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -419,14 +419,22 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh } if (mac_len != 0) - for (mac_opt = daemon->dhcp_macs; mac_opt; mac_opt = mac_opt->next) - if ((unsigned)mac_opt->hwaddr_len == mac_len && - ((unsigned)mac_opt->hwaddr_type == mac_type || mac_opt->hwaddr_type == 0) && - memcmp_masked(mac_opt->hwaddr, mac, mac_len, mac_opt->mask)) + { + if (option_bool(OPT_LOG_OPTS)) { - mac_opt->netid.next = state.tags; - state.tags = &mac_opt->netid; + print_mac(daemon->dhcp_buff, mac, mac_len); + my_syslog(MS_DHCP | LOG_INFO, _("%u client MAC address: %s"), state.xid, daemon->dhcp_buff); } + + for (mac_opt = daemon->dhcp_macs; mac_opt; mac_opt = mac_opt->next) + if ((unsigned)mac_opt->hwaddr_len == mac_len && + ((unsigned)mac_opt->hwaddr_type == mac_type || mac_opt->hwaddr_type == 0) && + memcmp_masked(mac_opt->hwaddr, mac, mac_len, mac_opt->mask)) + { + mac_opt->netid.next = state.tags; + state.tags = &mac_opt->netid; + } + } if ((opt = opt6_find(state.packet_options, state.end, OPTION6_FQDN, 1))) { @@ -1225,18 +1233,8 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh } log_tags(tagif, state.xid); + log6_opts(0, state.xid, daemon->outpacket.iov_base + start_opts, daemon->outpacket.iov_base + save_counter(-1)); - if (option_bool(OPT_LOG_OPTS)) - { - if (mac_len != 0) - { - print_mac(daemon->dhcp_buff, mac, mac_len); - my_syslog(MS_DHCP | LOG_INFO, _("%u client MAC address: %s"), state.xid, daemon->dhcp_buff); - } - - log6_opts(0, state.xid, daemon->outpacket.iov_base + start_opts, daemon->outpacket.iov_base + save_counter(-1)); - } - return 1; } @@ -1824,7 +1822,7 @@ static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_op void *opt; char *desc = nest ? "nest" : "sent"; - if (start_opts == end_opts) + if (!option_bool(OPT_LOG_OPTS) || start_opts == end_opts) return; for (opt = start_opts; opt; opt = opt6_next(opt, end_opts)) From 91543f4831fcbc54b56fcbcdaa6a3bb2e503be64 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 23 Sep 2013 12:41:20 +0100 Subject: [PATCH 18/67] Fix FTBFS when various facilities omitted at compile time. --- src/lease.c | 9 ++++++++- src/network.c | 4 +++- src/tftp.c | 2 -- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/lease.c b/src/lease.c index 7033370..02ca094 100644 --- a/src/lease.c +++ b/src/lease.c @@ -462,7 +462,6 @@ void lease_update_dns(int force) cache_add_dhcp_entry(lease->hostname, AF_INET6, (struct all_addr *)&slaac->addr, lease->expires); } } -#endif if (lease->fqdn) cache_add_dhcp_entry(lease->fqdn, prot, @@ -473,6 +472,14 @@ void lease_update_dns(int force) cache_add_dhcp_entry(lease->hostname, prot, prot == AF_INET ? (struct all_addr *)&lease->addr : (struct all_addr *)&lease->addr6, lease->expires); + +#else + if (lease->fqdn) + cache_add_dhcp_entry(lease->fqdn, prot, (struct all_addr *)&lease->addr, lease->expires); + + if (!option_bool(OPT_DHCP_FQDN) && lease->hostname) + cache_add_dhcp_entry(lease->hostname, prot, (struct all_addr *)&lease->addr, lease->expires); +#endif } dns_dirty = 0; diff --git a/src/network.c b/src/network.c index 712d7ee..576a7cf 100644 --- a/src/network.c +++ b/src/network.c @@ -243,7 +243,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label, int tftp_ok = !!option_bool(OPT_TFTP); int dhcp_ok = 1; int auth_dns = 0; -#ifdef HAVE_DHCP +#if defined(HAVE_DHCP) || defined(HAVE_TFTP) struct iname *tmp; #endif @@ -362,6 +362,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label, #endif +#ifdef HAVE_TFTP if (daemon->tftp_interfaces) { /* dedicated tftp interface list */ @@ -370,6 +371,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label, if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) tftp_ok = 1; } +#endif /* add to list */ if ((iface = whine_malloc(sizeof(struct irec)))) diff --git a/src/tftp.c b/src/tftp.c index d611dea..d752e71 100644 --- a/src/tftp.c +++ b/src/tftp.c @@ -49,9 +49,7 @@ void tftp_request(struct listener *listen, time_t now) struct iovec iov; struct ifreq ifr; int is_err = 1, if_index = 0, mtu = 0; -#ifdef HAVE_DHCP struct iname *tmp; -#endif struct tftp_transfer *transfer; int port = daemon->start_tftp_port; /* may be zero to use ephemeral port */ #if defined(IP_MTU_DISCOVER) && defined(IP_PMTUDISC_DONT) From f373a15b621da29ac7cd71343548886e3c07d074 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 23 Sep 2013 12:47:47 +0100 Subject: [PATCH 19/67] Ommit option-parsing code with NO_AUTH. --- src/option.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/option.c b/src/option.c index eb5f413..9b128cf 100644 --- a/src/option.c +++ b/src/option.c @@ -1571,6 +1571,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma break; } + +#ifdef HAVE_AUTH case LOPT_AUTHSERV: /* --auth-server */ if (!(comma = split(arg))) ret_err(gen_err); @@ -1693,6 +1695,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma } break; +#endif case 's': /* --domain */ case LOPT_SYNTH: /* --synth-domain */ From 1b55190d3fffb7fbe39fcc62f2273c78a77c3d29 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 23 Sep 2013 15:03:05 +0100 Subject: [PATCH 20/67] Fix FTBFS on OpenBSD. --- src/bpf.c | 6 ++++++ src/dhcp6.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/bpf.c b/src/bpf.c index 619a662..390d076 100644 --- a/src/bpf.c +++ b/src/bpf.c @@ -160,9 +160,15 @@ int iface_enumerate(int family, void *parm, int (*callback)()) if (ifr6.ifr_ifru.ifru_flags6 & IN6_IFF_DEPRECATED) flags |= IFACE_DEPRECATED; +#ifdef IN6_IFF_TEMPORARY if (!(ifr6.ifr_ifru.ifru_flags6 & (IN6_IFF_AUTOCONF | IN6_IFF_TEMPORARY))) flags |= IFACE_PERMANENT; +#endif +#ifdef IN6_IFF_PRIVACY + if (!(ifr6.ifr_ifru.ifru_flags6 & (IN6_IFF_AUTOCONF | IN6_IFF_PRIVACY))) + flags |= IFACE_PERMANENT; +#endif } ifr6.ifr_addr = *((struct sockaddr_in6 *) addrs->ifa_addr); diff --git a/src/dhcp6.c b/src/dhcp6.c index 5e151d6..146e693 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -280,7 +280,7 @@ static int find_mac(int family, char *addrp, char *mac, size_t maclen, void *par { struct mac_param *parm = parmv; - if (family == AF_INET6 && IN6_ARE_ADDR_EQUAL(parm->target, addrp)) + if (family == AF_INET6 && IN6_ARE_ADDR_EQUAL(parm->target, (struct in6_addr *)addrp)) { if (maclen <= DHCP_CHADDR_MAX) { From f1af2bb4858fe5653ca3ca2be97a54414a0e7c92 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Tue, 24 Sep 2013 09:16:28 +0100 Subject: [PATCH 21/67] Big ugly refactor in rfc3315.c should be no behaviour changes. --- src/rfc3315.c | 495 ++++++++++++++++++++++++-------------------------- 1 file changed, 240 insertions(+), 255 deletions(-) diff --git a/src/rfc3315.c b/src/rfc3315.c index 26dca71..adca102 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -24,7 +24,7 @@ struct state { int clid_len, iaid, ia_type, interface, hostname_auth, lease_allocate; char *client_hostname, *hostname, *domain, *send_domain; struct dhcp_context *context; - struct in6_addr *link_address; + struct in6_addr *link_address, *fallback; unsigned int xid, fqdn_flags; char *iface_name; void *packet_options, *end; @@ -36,15 +36,10 @@ struct state { #endif }; -static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid **relay_tagsp, struct dhcp_context *context, - int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now, - unsigned char *mac, unsigned int mac_len, unsigned int mac_type); -static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dhcp_netid *tags, struct dhcp_context *context, - int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now, - unsigned int mac_len, unsigned int mac_type, unsigned char *mac); +static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, int is_unicast, time_t now); +static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_t sz, int is_unicast, time_t now); static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_opts); static void log6_packet(struct state *state, char *type, struct in6_addr *addr, char *string); - static void *opt6_find (void *opts, void *end, unsigned int search, unsigned int minsize); static void *opt6_next(void *opts, void *end); static unsigned int opt6_uint(unsigned char *opt, int offset, int size); @@ -55,14 +50,14 @@ static void end_ia(int t1cntr, unsigned int min_time, int do_fuzz); #ifdef OPTION6_PREFIX_CLASS static struct prefix_class *prefix_class_from_context(struct dhcp_context *context); #endif -static void mark_context_used(struct state *state, struct dhcp_context *context, struct in6_addr *addr); +static void mark_context_used(struct state *state, struct in6_addr *addr); static void mark_config_used(struct dhcp_context *context, struct in6_addr *addr); static int check_address(struct state *state, struct in6_addr *addr); static void add_address(struct state *state, struct dhcp_context *context, unsigned int lease_time, void *ia_option, unsigned int *min_time, struct in6_addr *addr, time_t now); static void update_leases(struct state *state, struct dhcp_context *context, struct in6_addr *addr, unsigned int lease_time, time_t now); static int add_local_addrs(struct dhcp_context *context); -static struct dhcp_netid *add_options(struct state *state, struct in6_addr *fallback, struct dhcp_context *context, int do_refresh); +static struct dhcp_netid *add_options(struct state *state, int do_refresh); static void calculate_times(struct dhcp_context *context, unsigned int *min_time, unsigned int *valid_timep, unsigned int *preferred_timep, unsigned int lease_time); @@ -75,9 +70,9 @@ unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *if struct in6_addr *fallback, size_t sz, int is_unicast, time_t now, unsigned char *mac, unsigned int mac_len, unsigned int mac_type) { - struct dhcp_netid *relay_tags = NULL; struct dhcp_vendor *vendor; int msg_type; + struct state state; if (sz <= 4) return 0; @@ -89,19 +84,24 @@ unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *if vendor->netid.next = &vendor->netid; save_counter(0); - - if (dhcp6_maybe_relay(NULL, &relay_tags, context, interface, iface_name, - fallback, daemon->dhcp_packet.iov_base, sz, is_unicast, now, - mac, mac_len, mac_type)) + state.context = context; + state.interface = interface; + state.iface_name = iface_name; + state.fallback = fallback; + state.mac = mac; + state.mac_len = mac_len; + state.mac_type = mac_type; + state.tags = NULL; + state.link_address = NULL; + + if (dhcp6_maybe_relay(&state, daemon->dhcp_packet.iov_base, sz, is_unicast, now)) return msg_type == DHCP6RELAYFORW ? DHCPV6_SERVER_PORT : DHCPV6_CLIENT_PORT; return 0; } /* This cost me blood to write, it will probably cost you blood to understand - srk. */ -static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid **relay_tagsp, struct dhcp_context *context, - int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now, - unsigned char *mac, unsigned int mac_len, unsigned int mac_type) +static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, int is_unicast, time_t now) { void *end = inbuff + sz; void *opts = inbuff + 34; @@ -118,28 +118,28 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** address of the network on which we can allocate an address. Recalculate the available contexts using that information. */ - if (link_address) + if (state->link_address) { struct dhcp_context *c; - context = NULL; + state->context = NULL; - if (!IN6_IS_ADDR_LOOPBACK(link_address) && - !IN6_IS_ADDR_LINKLOCAL(link_address) && - !IN6_IS_ADDR_MULTICAST(link_address)) + if (!IN6_IS_ADDR_LOOPBACK(state->link_address) && + !IN6_IS_ADDR_LINKLOCAL(state->link_address) && + !IN6_IS_ADDR_MULTICAST(state->link_address)) for (c = daemon->dhcp6; c; c = c->next) if ((c->flags & CONTEXT_DHCP) && !(c->flags & (CONTEXT_TEMPLATE | CONTEXT_OLD)) && - is_same_net6(link_address, &c->start6, c->prefix) && - is_same_net6(link_address, &c->end6, c->prefix)) + is_same_net6(state->link_address, &c->start6, c->prefix) && + is_same_net6(state->link_address, &c->end6, c->prefix)) { c->preferred = c->valid = 0xffffffff; - c->current = context; - context = c; + c->current = state->context; + state->context = c; } - if (!context) + if (!state->context) { - inet_ntop(AF_INET6, link_address, daemon->addrbuff, ADDRSTRLEN); + inet_ntop(AF_INET6, state->link_address, daemon->addrbuff, ADDRSTRLEN); my_syslog(MS_DHCP | LOG_WARNING, _("no address range available for DHCPv6 request from relay at %s"), daemon->addrbuff); @@ -147,15 +147,14 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** } } - if (!context) + if (!state->context) { my_syslog(MS_DHCP | LOG_WARNING, - _("no address range available for DHCPv6 request via %s"), iface_name); + _("no address range available for DHCPv6 request via %s"), state->iface_name); return 0; } - return dhcp6_no_relay(msg_type, link_address, *relay_tagsp, context, interface, iface_name, fallback, inbuff, - sz, is_unicast, now, mac_len, mac_type, mac); + return dhcp6_no_relay(state, msg_type, inbuff, sz, is_unicast, now); } /* must have at least msg_type+hopcount+link_address+peer_address+minimal size option @@ -185,8 +184,8 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** memcmp(vendor->data, opt6_ptr(opt, 0), vendor->len) == 0 && vendor->netid.next != &vendor->netid) { - vendor->netid.next = *relay_tagsp; - *relay_tagsp = &vendor->netid; + vendor->netid.next = state->tags; + state->tags = &vendor->netid; break; } } @@ -194,9 +193,9 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** /* RFC-6939 */ if ((opt = opt6_find(opts, end, OPTION6_CLIENT_MAC, 3))) { - mac = opt6_ptr(opt, 2); - mac_type = opt6_uint(opt, 0, 2); - mac_len = opt6_len(opt) - 2; + state->mac = opt6_ptr(opt, 2); + state->mac_type = opt6_uint(opt, 0, 2); + state->mac_len = opt6_len(opt) - 2; } for (opt = opts; opt; opt = opt6_next(opt, end)) @@ -204,14 +203,13 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** int o = new_opt6(opt6_type(opt)); if (opt6_type(opt) == OPTION6_RELAY_MSG) { - struct in6_addr link_address; + struct in6_addr align; /* the packet data is unaligned, copy to aligned storage */ - memcpy(&link_address, inbuff + 2, IN6ADDRSZ); - /* Not, zero is_unicast since that is now known to refer to the + memcpy(&align, inbuff + 2, IN6ADDRSZ); + state->link_address = &align; + /* zero is_unicast since that is now known to refer to the relayed packet, not the original sent by the client */ - if (!dhcp6_maybe_relay(&link_address, relay_tagsp, context, interface, iface_name, fallback, - opt6_ptr(opt, 0), opt6_len(opt), 0, now, - mac, mac_len, mac_type)) + if (!dhcp6_maybe_relay(state, opt6_ptr(opt, 0), opt6_len(opt), 0, now)) return 0; } else if (opt6_type(opt) != OPTION6_CLIENT_MAC) @@ -222,9 +220,7 @@ static int dhcp6_maybe_relay(struct in6_addr *link_address, struct dhcp_netid ** return 1; } -static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dhcp_netid *tags, struct dhcp_context *context, - int interface, char *iface_name, struct in6_addr *fallback, void *inbuff, size_t sz, int is_unicast, time_t now, - unsigned int mac_len, unsigned int mac_type, unsigned char *mac) +static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_t sz, int is_unicast, time_t now) { void *opt; int i, o, o1, start_opts; @@ -237,57 +233,48 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh struct dhcp_context *context_tmp; struct dhcp_mac *mac_opt; unsigned int ignore = 0; - struct state state; #ifdef OPTION6_PREFIX_CLASS struct prefix_class *p; int dump_all_prefix_classes = 0; #endif - state.packet_options = inbuff + 4; - state.end = inbuff + sz; - state.clid = NULL; - state.clid_len = 0; - state.lease_allocate = 0; - state.context_tags = NULL; - state.tags = tags; - state.link_address = link_address; - state.interface = interface; - state.domain = NULL; - state.send_domain = NULL; - state.context = context; - state.hostname_auth = 0; - state.hostname = NULL; - state.client_hostname = NULL; - state.iface_name = iface_name; - state.fqdn_flags = 0x01; /* default to send if we recieve no FQDN option */ - state.mac = mac; - state.mac_len = mac_len; - state.mac_type = mac_type; + state->packet_options = inbuff + 4; + state->end = inbuff + sz; + state->clid = NULL; + state->clid_len = 0; + state->lease_allocate = 0; + state->context_tags = NULL; + state->domain = NULL; + state->send_domain = NULL; + state->hostname_auth = 0; + state->hostname = NULL; + state->client_hostname = NULL; + state->fqdn_flags = 0x01; /* default to send if we recieve no FQDN option */ #ifdef OPTION6_PREFIX_CLASS - state.send_prefix_class = NULL; + state->send_prefix_class = NULL; #endif /* set tag with name == interface */ - iface_id.net = iface_name; - iface_id.next = state.tags; - state.tags = &iface_id; + iface_id.net = state->iface_name; + iface_id.next = state->tags; + state->tags = &iface_id; /* set tag "dhcpv6" */ v6_id.net = "dhcpv6"; - v6_id.next = state.tags; - state.tags = &v6_id; + v6_id.next = state->tags; + state->tags = &v6_id; /* copy over transaction-id, and save pointer to message type */ if (!(outmsgtypep = put_opt6(inbuff, 4))) return 0; start_opts = save_counter(-1); - state.xid = outmsgtypep[3] | outmsgtypep[2] << 8 | outmsgtypep[1] << 16; + state->xid = outmsgtypep[3] | outmsgtypep[2] << 8 | outmsgtypep[1] << 16; /* We're going to be linking tags from all context we use. mark them as unused so we don't link one twice and break the list */ - for (context_tmp = context; context_tmp; context_tmp = context_tmp->current) + for (context_tmp = state->context; context_tmp; context_tmp = context_tmp->current) { - context->netid.next = &context->netid; + context_tmp->netid.next = &context_tmp->netid; if (option_bool(OPT_LOG_OPTS)) { @@ -295,19 +282,19 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh inet_ntop(AF_INET6, &context_tmp->end6, daemon->dhcp_buff2, ADDRSTRLEN); if (context_tmp->flags & (CONTEXT_STATIC)) my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCPv6 subnet: %s/%d"), - state.xid, daemon->dhcp_buff, context_tmp->prefix); + state->xid, daemon->dhcp_buff, context_tmp->prefix); else my_syslog(MS_DHCP | LOG_INFO, _("%u available DHCP range: %s -- %s"), - state.xid, daemon->dhcp_buff, daemon->dhcp_buff2); + state->xid, daemon->dhcp_buff, daemon->dhcp_buff2); } } - if ((opt = opt6_find(state.packet_options, state.end, OPTION6_CLIENT_ID, 1))) + if ((opt = opt6_find(state->packet_options, state->end, OPTION6_CLIENT_ID, 1))) { - state.clid = opt6_ptr(opt, 0); - state.clid_len = opt6_len(opt); + state->clid = opt6_ptr(opt, 0); + state->clid_len = opt6_len(opt); o = new_opt6(OPTION6_CLIENT_ID); - put_opt6(state.clid, state.clid_len); + put_opt6(state->clid, state->clid_len); end_opt6(o); } else if (msg_type != DHCP6IREQ) @@ -315,7 +302,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh /* server-id must match except for SOLICIT and CONFIRM messages */ if (msg_type != DHCP6SOLICIT && msg_type != DHCP6CONFIRM && msg_type != DHCP6IREQ && - (!(opt = opt6_find(state.packet_options, state.end, OPTION6_SERVER_ID, 1)) || + (!(opt = opt6_find(state->packet_options, state->end, OPTION6_SERVER_ID, 1)) || opt6_len(opt) != daemon->duid_len || memcmp(opt6_ptr(opt, 0), daemon->duid, daemon->duid_len) != 0)) return 0; @@ -347,7 +334,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh else continue; - if ((opt = opt6_find(state.packet_options, state.end, mopt, 2))) + if ((opt = opt6_find(state->packet_options, state->end, mopt, 2))) { void *enc_opt, *enc_end = opt6_ptr(opt, opt6_len(opt)); int offset = 0; @@ -367,15 +354,15 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh for (i = 0; i <= (opt6_len(enc_opt) - vendor->len); i++) if (memcmp(vendor->data, opt6_ptr(enc_opt, i), vendor->len) == 0) { - vendor->netid.next = state.tags; - state.tags = &vendor->netid; + vendor->netid.next = state->tags; + state->tags = &vendor->netid; break; } } } - if (option_bool(OPT_LOG_OPTS) && (opt = opt6_find(state.packet_options, state.end, OPTION6_VENDOR_CLASS, 4))) - my_syslog(MS_DHCP | LOG_INFO, _("%u vendor class: %u"), state.xid, opt6_uint(opt, 0, 4)); + if (option_bool(OPT_LOG_OPTS) && (opt = opt6_find(state->packet_options, state->end, OPTION6_VENDOR_CLASS, 4))) + my_syslog(MS_DHCP | LOG_INFO, _("%u vendor class: %u"), state->xid, opt6_uint(opt, 0, 4)); /* dhcp-match. If we have hex-and-wildcards, look for a left-anchored match. Otherwise assume the option is an array, and look for a matching element. @@ -387,9 +374,9 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (opt_cfg->flags & DHOPT_RFC3925) { - for (opt = opt6_find(state.packet_options, state.end, OPTION6_VENDOR_OPTS, 4); + for (opt = opt6_find(state->packet_options, state->end, OPTION6_VENDOR_OPTS, 4); opt; - opt = opt6_find(opt6_next(opt, state.end), state.end, OPTION6_VENDOR_OPTS, 4)) + opt = opt6_find(opt6_next(opt, state->end), state->end, OPTION6_VENDOR_OPTS, 4)) { void *vopt; void *vend = opt6_ptr(opt, opt6_len(opt)); @@ -405,7 +392,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh } else { - if (!(opt = opt6_find(state.packet_options, state.end, opt_cfg->opt, 1))) + if (!(opt = opt6_find(state->packet_options, state->end, opt_cfg->opt, 1))) continue; match = match_bytes(opt_cfg, opt6_ptr(opt, 0), opt6_len(opt)); @@ -413,41 +400,41 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (match) { - opt_cfg->netid->next = state.tags; - state.tags = opt_cfg->netid; + opt_cfg->netid->next = state->tags; + state->tags = opt_cfg->netid; } } - if (mac_len != 0) + if (state->mac_len != 0) { if (option_bool(OPT_LOG_OPTS)) { - print_mac(daemon->dhcp_buff, mac, mac_len); - my_syslog(MS_DHCP | LOG_INFO, _("%u client MAC address: %s"), state.xid, daemon->dhcp_buff); + print_mac(daemon->dhcp_buff, state->mac, state->mac_len); + my_syslog(MS_DHCP | LOG_INFO, _("%u client MAC address: %s"), state->xid, daemon->dhcp_buff); } for (mac_opt = daemon->dhcp_macs; mac_opt; mac_opt = mac_opt->next) - if ((unsigned)mac_opt->hwaddr_len == mac_len && - ((unsigned)mac_opt->hwaddr_type == mac_type || mac_opt->hwaddr_type == 0) && - memcmp_masked(mac_opt->hwaddr, mac, mac_len, mac_opt->mask)) + if ((unsigned)mac_opt->hwaddr_len == state->mac_len && + ((unsigned)mac_opt->hwaddr_type == state->mac_type || mac_opt->hwaddr_type == 0) && + memcmp_masked(mac_opt->hwaddr, state->mac, state->mac_len, mac_opt->mask)) { - mac_opt->netid.next = state.tags; - state.tags = &mac_opt->netid; + mac_opt->netid.next = state->tags; + state->tags = &mac_opt->netid; } } - if ((opt = opt6_find(state.packet_options, state.end, OPTION6_FQDN, 1))) + if ((opt = opt6_find(state->packet_options, state->end, OPTION6_FQDN, 1))) { /* RFC4704 refers */ int len = opt6_len(opt) - 1; - state.fqdn_flags = opt6_uint(opt, 0, 1); + state->fqdn_flags = opt6_uint(opt, 0, 1); /* Always force update, since the client has no way to do it itself. */ - if (!option_bool(OPT_FQDN_UPDATE) && !(state.fqdn_flags & 0x01)) - state.fqdn_flags |= 0x03; + if (!option_bool(OPT_FQDN_UPDATE) && !(state->fqdn_flags & 0x01)) + state->fqdn_flags |= 0x03; - state.fqdn_flags &= ~0x04; + state->fqdn_flags &= ~0x04; if (len != 0 && len < 255) { @@ -469,36 +456,36 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (legal_hostname(daemon->dhcp_buff)) { - state.client_hostname = daemon->dhcp_buff; + state->client_hostname = daemon->dhcp_buff; if (option_bool(OPT_LOG_OPTS)) - my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), state.xid, state.client_hostname); + my_syslog(MS_DHCP | LOG_INFO, _("%u client provides name: %s"), state->xid, state->client_hostname); } } } - if (state.clid) + if (state->clid) { - config = find_config(daemon->dhcp_conf, context, state.clid, state.clid_len, mac, mac_len, mac_type, NULL); + config = find_config(daemon->dhcp_conf, state->context, state->clid, state->clid_len, state->mac, state->mac_len, state->mac_type, NULL); if (have_config(config, CONFIG_NAME)) { - state.hostname = config->hostname; - state.domain = config->domain; - state.hostname_auth = 1; + state->hostname = config->hostname; + state->domain = config->domain; + state->hostname_auth = 1; } - else if (state.client_hostname) + else if (state->client_hostname) { - state.domain = strip_hostname(state.client_hostname); + state->domain = strip_hostname(state->client_hostname); - if (strlen(state.client_hostname) != 0) + if (strlen(state->client_hostname) != 0) { - state.hostname = state.client_hostname; + state->hostname = state->client_hostname; if (!config) { /* Search again now we have a hostname. Only accept configs without CLID here, (it won't match) to avoid impersonation by name. */ - struct dhcp_config *new = find_config(daemon->dhcp_conf, context, NULL, 0, NULL, 0, 0, state.hostname); + struct dhcp_config *new = find_config(daemon->dhcp_conf, state->context, NULL, 0, NULL, 0, 0, state->hostname); if (new && !have_config(new, CONFIG_CLID) && !new->hwaddr) config = new; } @@ -512,14 +499,14 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh for (list = config->netid; list; list = list->next) { - list->list->next = state.tags; - state.tags = list->list; + list->list->next = state->tags; + state->tags = list->list; } /* set "known" tag for known hosts */ known_id.net = "known"; - known_id.next = state.tags; - state.tags = &known_id; + known_id.next = state->tags; + state->tags = &known_id; if (have_config(config, CONFIG_DISABLE)) ignore = 1; @@ -531,7 +518,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh { void *oro; - if ((oro = opt6_find(state.packet_options, state.end, OPTION6_ORO, 0))) + if ((oro = opt6_find(state->packet_options, state->end, OPTION6_ORO, 0))) for (i = 0; i < opt6_len(oro) - 1; i += 2) if (opt6_uint(oro, i, 2) == OPTION6_PREFIX_CLASS) { @@ -544,13 +531,13 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh Not done for SOLICIT as we add them one-at-time. */ for (p = daemon->prefix_classes; p ; p = p->next) { - p->tag.next = state.tags; - state.tags = &p->tag; + p->tag.next = state->tags; + state->tags = &p->tag; } } #endif - tagif = run_tag_if(state.tags); + tagif = run_tag_if(state->tags); /* if all the netids in the ignore list are present, ignore this client */ if (daemon->dhcp_ignore) @@ -563,7 +550,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh } /* if all the netids in the ignore_name list are present, ignore client-supplied name */ - if (!state.hostname_auth) + if (!state->hostname_auth) { struct dhcp_netid_list *id_list; @@ -571,7 +558,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if ((!id_list->list) || match_netid(id_list->list, tagif, 0)) break; if (id_list) - state.hostname = NULL; + state->hostname = NULL; } @@ -590,15 +577,15 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh *outmsgtypep = DHCP6ADVERTISE; - if (opt6_find(state.packet_options, state.end, OPTION6_RAPID_COMMIT, 0)) + if (opt6_find(state->packet_options, state->end, OPTION6_RAPID_COMMIT, 0)) { *outmsgtypep = DHCP6REPLY; - state.lease_allocate = 1; + state->lease_allocate = 1; o = new_opt6(OPTION6_RAPID_COMMIT); end_opt6(o); } - log6_packet(&state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL); + log6_packet(state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL); request_no_address: solicit_tags = tagif; @@ -610,10 +597,10 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh lease6_reset(); /* Can use configured address max once per prefix */ - for (c = context; c; c = c->current) + for (c = state->context; c; c = c->current) c->flags &= ~CONTEXT_CONF_USED; - for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end)) + for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { void *ia_option, *ia_end; unsigned int min_time = 0xffffffff; @@ -627,15 +614,15 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh struct in6_addr *req_addr; struct in6_addr addr; - if (!check_ia(&state, opt, &ia_end, &ia_option)) + if (!check_ia(state, opt, &ia_end, &ia_option)) continue; /* reset USED bits in contexts - one address per prefix per IAID */ - for (c = context; c; c = c->current) + for (c = state->context; c; c = c->current) c->flags &= ~CONTEXT_USED; #ifdef OPTION6_PREFIX_CLASS - if (daemon->prefix_classes && state.ia_type == OPTION6_IA_NA) + if (daemon->prefix_classes && state->ia_type == OPTION6_IA_NA) { void *prefix_opt; int prefix_class; @@ -659,10 +646,10 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh else { /* add tag to list, and exclude undecorated dhcp-ranges */ - p->tag.next = state.tags; + p->tag.next = state->tags; solicit_tags = run_tag_if(&p->tag); plain_range = 0; - state.send_prefix_class = p; + state->send_prefix_class = p; } } else @@ -678,103 +665,103 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh if (p) { plain_range = 0; - state.send_prefix_class = p; + state->send_prefix_class = p; } } if (p && option_bool(OPT_LOG_OPTS)) - my_syslog(MS_DHCP | LOG_INFO, "%u prefix class %d tag:%s", state.xid, p->class, p->tag.net); + my_syslog(MS_DHCP | LOG_INFO, "%u prefix class %d tag:%s", state->xid, p->class, p->tag.net); } } #endif - o = build_ia(&state, &t1cntr); + o = build_ia(state, &t1cntr); for (ia_counter = 0; ia_option; ia_counter++, ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) { req_addr = opt6_ptr(ia_option, 0); - if ((c = address6_valid(context, req_addr, solicit_tags, plain_range))) + if ((c = address6_valid(state->context, req_addr, solicit_tags, plain_range))) { lease_time = c->lease_time; /* If the client asks for an address on the same network as a configured address, offer the configured address instead, to make moving to newly-configured addresses automatic. */ - if (!(c->flags & CONTEXT_CONF_USED) && config_valid(config, c, &addr) && check_address(&state, &addr)) + if (!(c->flags & CONTEXT_CONF_USED) && config_valid(config, c, &addr) && check_address(state, &addr)) { req_addr = &addr; mark_config_used(c, &addr); if (have_config(config, CONFIG_TIME)) lease_time = config->lease_time; } - else if (!(c = address6_available(context, req_addr, solicit_tags, plain_range))) + else if (!(c = address6_available(state->context, req_addr, solicit_tags, plain_range))) continue; /* not an address we're allowed */ - else if (!check_address(&state, req_addr)) + else if (!check_address(state, req_addr)) continue; /* address leased elsewhere */ /* add address to output packet */ #ifdef OPTION6_PREFIX_CLASS - if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) - state.send_prefix_class = prefix_class_from_context(c); + if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA) + state->send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, c, lease_time, ia_option, &min_time, req_addr, now); - mark_context_used(&state, context, req_addr); - get_context_tag(&state, c); + add_address(state, c, lease_time, ia_option, &min_time, req_addr, now); + mark_context_used(state, req_addr); + get_context_tag(state, c); address_assigned = 1; } } /* Suggest configured address(es) */ - for (c = context; c; c = c->current) + for (c = state->context; c; c = c->current) if (!(c->flags & CONTEXT_CONF_USED) && match_netid(c->filter, solicit_tags, plain_range) && config_valid(config, c, &addr) && - check_address(&state, &addr)) + check_address(state, &addr)) { - mark_config_used(context, &addr); + mark_config_used(state->context, &addr); if (have_config(config, CONFIG_TIME)) lease_time = config->lease_time; else lease_time = c->lease_time; /* add address to output packet */ #ifdef OPTION6_PREFIX_CLASS - if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) - state.send_prefix_class = prefix_class_from_context(c); + if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA) + state->send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, c, lease_time, NULL, &min_time, &addr, now); - mark_context_used(&state, context, &addr); - get_context_tag(&state, c); + add_address(state, c, lease_time, NULL, &min_time, &addr, now); + mark_context_used(state, &addr); + get_context_tag(state, c); address_assigned = 1; } /* return addresses for existing leases */ ltmp = NULL; - while ((ltmp = lease6_find_by_client(ltmp, state.ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, state.clid, state.clid_len, state.iaid))) + while ((ltmp = lease6_find_by_client(ltmp, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, state->clid, state->clid_len, state->iaid))) { req_addr = <mp->addr6; - if ((c = address6_available(context, req_addr, solicit_tags, plain_range))) + if ((c = address6_available(state->context, req_addr, solicit_tags, plain_range))) { #ifdef OPTION6_PREFIX_CLASS - if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) - state.send_prefix_class = prefix_class_from_context(c); + if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA) + state->send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, c, c->lease_time, NULL, &min_time, req_addr, now); - mark_context_used(&state, context, req_addr); - get_context_tag(&state, c); + add_address(state, c, c->lease_time, NULL, &min_time, req_addr, now); + mark_context_used(state, req_addr); + get_context_tag(state, c); address_assigned = 1; } } /* Return addresses for all valid contexts which don't yet have one */ - while ((c = address6_allocate(context, state.clid, state.clid_len, state.iaid, ia_counter, solicit_tags, plain_range, &addr))) + while ((c = address6_allocate(state->context, state->clid, state->clid_len, state->iaid, ia_counter, solicit_tags, plain_range, &addr))) { #ifdef OPTION6_PREFIX_CLASS - if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) - state.send_prefix_class = prefix_class_from_context(c); + if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA) + state->send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, c, c->lease_time, NULL, &min_time, &addr, now); - mark_context_used(&state, context, &addr); - get_context_tag(&state, c); + add_address(state, c, c->lease_time, NULL, &min_time, &addr, now); + mark_context_used(state, &addr); + get_context_tag(state, c); address_assigned = 1; } @@ -794,7 +781,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh o = new_opt6(OPTION6_PREFERENCE); put_opt6_char(option_bool(OPT_AUTHORITATIVE) ? 255 : 0); end_opt6(o); - tagif = add_options(&state, fallback, context, 0); + tagif = add_options(state, 0); } else { @@ -803,7 +790,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh put_opt6_short(DHCP6NOADDRS); put_opt6_string(_("no addresses available")); end_opt6(o1); - log6_packet(&state, "DHCPADVERTISE", NULL, _("no addresses available")); + log6_packet(state, "DHCPADVERTISE", NULL, _("no addresses available")); } break; @@ -816,20 +803,20 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh /* set reply message type */ *outmsgtypep = DHCP6REPLY; - state.lease_allocate = 1; + state->lease_allocate = 1; - log6_packet(&state, "DHCPREQUEST", NULL, ignore ? _("ignored") : NULL); + log6_packet(state, "DHCPREQUEST", NULL, ignore ? _("ignored") : NULL); if (ignore) return 0; - for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end)) + for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { void *ia_option, *ia_end; unsigned int min_time = 0xffffffff; int t1cntr; - if (!check_ia(&state, opt, &ia_end, &ia_option)) + if (!check_ia(state, opt, &ia_end, &ia_option)) continue; if (!ia_option) @@ -840,7 +827,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh goto request_no_address; } - o = build_ia(&state, &t1cntr); + o = build_ia(state, &t1cntr); for (; ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) { @@ -850,10 +837,10 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh struct in6_addr addr; int config_ok = 0; - if ((c = address6_valid(context, req_addr, tagif, 1))) + if ((c = address6_valid(state->context, req_addr, tagif, 1))) config_ok = config_valid(config, c, &addr) && IN6_ARE_ADDR_EQUAL(&addr, req_addr); - if ((dynamic = address6_available(context, req_addr, tagif, 1)) || c) + if ((dynamic = address6_available(state->context, req_addr, tagif, 1)) || c) { if (!dynamic && !config_ok) { @@ -863,7 +850,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh put_opt6_string(_("address unavailable")); end_opt6(o1); } - else if (!check_address(&state, req_addr)) + else if (!check_address(state, req_addr)) { /* Address leased to another DUID/IAID */ o1 = new_opt6(OPTION6_STATUS_CODE); @@ -882,11 +869,11 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh lease_time = config->lease_time; #ifdef OPTION6_PREFIX_CLASS - if (dump_all_prefix_classes && state.ia_type == OPTION6_IA_NA) - state.send_prefix_class = prefix_class_from_context(c); + if (dump_all_prefix_classes && state->ia_type == OPTION6_IA_NA) + state->send_prefix_class = prefix_class_from_context(c); #endif - add_address(&state, dynamic, lease_time, ia_option, &min_time, req_addr, now); - get_context_tag(&state, dynamic); + add_address(state, dynamic, lease_time, ia_option, &min_time, req_addr, now); + get_context_tag(state, dynamic); address_assigned = 1; } } @@ -918,10 +905,10 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh put_opt6_short(DHCP6NOADDRS); put_opt6_string(_("no addresses available")); end_opt6(o1); - log6_packet(&state, "DHCPREPLY", NULL, _("no addresses available")); + log6_packet(state, "DHCPREPLY", NULL, _("no addresses available")); } - tagif = add_options(&state, fallback, context, 0); + tagif = add_options(state, 0); break; } @@ -931,18 +918,18 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh /* set reply message type */ *outmsgtypep = DHCP6REPLY; - log6_packet(&state, "DHCPRENEW", NULL, NULL); + log6_packet(state, "DHCPRENEW", NULL, NULL); - for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end)) + for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { void *ia_option, *ia_end; unsigned int min_time = 0xffffffff; int t1cntr, iacntr; - if (!check_ia(&state, opt, &ia_end, &ia_option)) + if (!check_ia(state, opt, &ia_end, &ia_option)) continue; - o = build_ia(&state, &t1cntr); + o = build_ia(state, &t1cntr); iacntr = save_counter(-1); for (; ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) @@ -954,9 +941,9 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh char *message = NULL; struct dhcp_context *this_context; - if (!(lease = lease6_find(state.clid, state.clid_len, - state.ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, - state.iaid, req_addr))) + if (!(lease = lease6_find(state->clid, state->clid_len, + state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, + state->iaid, req_addr))) { /* If the server cannot find a client entry for the IA the server returns the IA containing no addresses with a Status Code option set @@ -964,7 +951,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh save_counter(iacntr); t1cntr = 0; - log6_packet(&state, "DHCPREPLY", req_addr, _("lease not found")); + log6_packet(state, "DHCPREPLY", req_addr, _("lease not found")); o1 = new_opt6(OPTION6_STATUS_CODE); put_opt6_short(DHCP6NOBINDING); @@ -976,13 +963,13 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh } - if ((this_context = address6_available(context, req_addr, tagif, 1)) || - (this_context = address6_valid(context, req_addr, tagif, 1))) + if ((this_context = address6_available(state->context, req_addr, tagif, 1)) || + (this_context = address6_valid(state->context, req_addr, tagif, 1))) { struct in6_addr addr; unsigned int lease_time; - get_context_tag(&state, this_context); + get_context_tag(state, this_context); if (config_valid(config, this_context, &addr) && IN6_ARE_ADDR_EQUAL(&addr, req_addr) && have_config(config, CONFIG_TIME)) lease_time = config->lease_time; @@ -993,15 +980,15 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh lease_set_expires(lease, valid_time, now); /* Update MAC record in case it's new information. */ - if (mac_len != 0) - lease_set_hwaddr(lease, mac, state.clid, mac_len, mac_type, state.clid_len, now, 0); - if (state.ia_type == OPTION6_IA_NA && state.hostname) + if (state->mac_len != 0) + lease_set_hwaddr(lease, state->mac, state->clid, state->mac_len, state->mac_type, state->clid_len, now, 0); + if (state->ia_type == OPTION6_IA_NA && state->hostname) { char *addr_domain = get_domain6(req_addr); - if (!state.send_domain) - state.send_domain = addr_domain; - lease_set_hostname(lease, state.hostname, state.hostname_auth, addr_domain, state.domain); - message = state.hostname; + if (!state->send_domain) + state->send_domain = addr_domain; + lease_set_hostname(lease, state->hostname, state->hostname_auth, addr_domain, state->domain); + message = state->hostname; } @@ -1014,7 +1001,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh message = _("address invalid"); } - log6_packet(&state, "DHCPREPLY", req_addr, message); + log6_packet(state, "DHCPREPLY", req_addr, message); o1 = new_opt6(OPTION6_IAADDR); put_opt6(req_addr, sizeof(*req_addr)); @@ -1027,7 +1014,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh end_opt6(o); } - tagif = add_options(&state, fallback, context, 0); + tagif = add_options(state, 0); break; } @@ -1037,19 +1024,19 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh /* set reply message type */ *outmsgtypep = DHCP6REPLY; - log6_packet(&state, "DHCPCONFIRM", NULL, NULL); + log6_packet(state, "DHCPCONFIRM", NULL, NULL); - for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end)) + for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { void *ia_option, *ia_end; - for (check_ia(&state, opt, &ia_end, &ia_option); + for (check_ia(state, opt, &ia_end, &ia_option); ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) { struct in6_addr *req_addr = opt6_ptr(ia_option, 0); - if (!address6_available(context, req_addr, tagif, 1)) + if (!address6_available(state->context, req_addr, tagif, 1)) { o1 = new_opt6(OPTION6_STATUS_CODE); put_opt6_short(DHCP6NOTONLINK); @@ -1058,7 +1045,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh return 1; } - log6_packet(&state, "DHCPREPLY", req_addr, state.hostname); + log6_packet(state, "DHCPREPLY", req_addr, state->hostname); } } @@ -1073,25 +1060,25 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh { /* We can't discriminate contexts based on address, as we don't know it. If there is only one possible context, we can use its tags */ - if (context && context->netid.net && !context->current) + if (state->context && state->context->netid.net && !state->context->current) { - context->netid.next = NULL; - state.context_tags = &context->netid; + state->context->netid.next = NULL; + state->context_tags = &state->context->netid; } /* Similarly, we can't determine domain from address, but if the FQDN is given in --dhcp-host, we can use that, and failing that we can use the unqualified configured domain, if any. */ - if (state.hostname_auth) - state.send_domain = state.domain; + if (state->hostname_auth) + state->send_domain = state->domain; else - state.send_domain = get_domain6(NULL); + state->send_domain = get_domain6(NULL); - log6_packet(&state, "DHCPINFORMATION-REQUEST", NULL, ignore ? _("ignored") : state.hostname); + log6_packet(state, "DHCPINFORMATION-REQUEST", NULL, ignore ? _("ignored") : state->hostname); if (ignore) return 0; *outmsgtypep = DHCP6REPLY; - tagif = add_options(&state, fallback, context, 1); + tagif = add_options(state, 1); break; } @@ -1101,29 +1088,29 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh /* set reply message type */ *outmsgtypep = DHCP6REPLY; - log6_packet(&state, "DHCPRELEASE", NULL, NULL); + log6_packet(state, "DHCPRELEASE", NULL, NULL); - for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end)) + for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { void *ia_option, *ia_end; int made_ia = 0; - for (check_ia(&state, opt, &ia_end, &ia_option); + for (check_ia(state, opt, &ia_end, &ia_option); ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) { struct dhcp_lease *lease; - if ((lease = lease6_find(state.clid, state.clid_len, state.ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, - state.iaid, opt6_ptr(ia_option, 0)))) + if ((lease = lease6_find(state->clid, state->clid_len, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, + state->iaid, opt6_ptr(ia_option, 0)))) lease_prune(lease, now); else { if (!made_ia) { - o = new_opt6(state.ia_type); - put_opt6_long(state.iaid); - if (state.ia_type == OPTION6_IA_NA) + o = new_opt6(state->ia_type); + put_opt6_long(state->iaid); + if (state->ia_type == OPTION6_IA_NA) { put_opt6_long(0); put_opt6_long(0); @@ -1163,14 +1150,14 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh /* set reply message type */ *outmsgtypep = DHCP6REPLY; - log6_packet(&state, "DHCPDECLINE", NULL, NULL); + log6_packet(state, "DHCPDECLINE", NULL, NULL); - for (opt = state.packet_options; opt; opt = opt6_next(opt, state.end)) + for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { void *ia_option, *ia_end; int made_ia = 0; - for (check_ia(&state, opt, &ia_end, &ia_option); + for (check_ia(state, opt, &ia_end, &ia_option); ia_option; ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24)) { @@ -1188,19 +1175,19 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh } else /* make sure this host gets a different address next time. */ - for (; context; context = context->current) - context->addr_epoch++; + for (context_tmp = state->context; context_tmp; context_tmp = context_tmp->current) + context_tmp->addr_epoch++; - if ((lease = lease6_find(state.clid, state.clid_len, state.ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, - state.iaid, opt6_ptr(ia_option, 0)))) + if ((lease = lease6_find(state->clid, state->clid_len, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA, + state->iaid, opt6_ptr(ia_option, 0)))) lease_prune(lease, now); else { if (!made_ia) { - o = new_opt6(state.ia_type); - put_opt6_long(state.iaid); - if (state.ia_type == OPTION6_IA_NA) + o = new_opt6(state->ia_type); + put_opt6_long(state->iaid); + if (state->ia_type == OPTION6_IA_NA) { put_opt6_long(0); put_opt6_long(0); @@ -1232,17 +1219,14 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh } - log_tags(tagif, state.xid); - log6_opts(0, state.xid, daemon->outpacket.iov_base + start_opts, daemon->outpacket.iov_base + save_counter(-1)); + log_tags(tagif, state->xid); + log6_opts(0, state->xid, daemon->outpacket.iov_base + start_opts, daemon->outpacket.iov_base + save_counter(-1)); return 1; } -static struct dhcp_netid *add_options(struct state *state, - struct in6_addr *fallback, - struct dhcp_context *context, - int do_refresh) +static struct dhcp_netid *add_options(struct state *state, int do_refresh) { void *oro; /* filter options based on tags, those we want get DHOPT_TAGOK bit set */ @@ -1290,8 +1274,8 @@ static struct dhcp_netid *add_options(struct state *state, /* zero means "self" (but not in vendorclass options.) */ if (IN6_IS_ADDR_UNSPECIFIED(a)) { - if (!add_local_addrs(context)) - put_opt6(fallback, IN6ADDRSZ); + if (!add_local_addrs(state->context)) + put_opt6(state->fallback, IN6ADDRSZ); } else put_opt6(a, IN6ADDRSZ); @@ -1305,12 +1289,12 @@ static struct dhcp_netid *add_options(struct state *state, if (daemon->port == NAMESERVER_PORT && !done_dns) { o = new_opt6(OPTION6_DNS_SERVER); - if (!add_local_addrs(context)) - put_opt6(fallback, IN6ADDRSZ); + if (!add_local_addrs(state->context)) + put_opt6(state->fallback, IN6ADDRSZ); end_opt6(o); } - if (context && !done_refresh) + if (state->context && !done_refresh) { struct dhcp_context *c; unsigned int lease_time = 0xffffffff; @@ -1318,7 +1302,7 @@ static struct dhcp_netid *add_options(struct state *state, /* Find the smallest lease tie of all contexts, subjext to the RFC-4242 stipulation that this must not be less than 600. */ - for (c = context; c; c = c->next) + for (c = state->context; c; c = c->next) if (c->lease_time < lease_time) { if (c->lease_time < 600) @@ -1620,17 +1604,18 @@ static void add_address(struct state *state, struct dhcp_context *context, unsig } -static void mark_context_used(struct state *state, struct dhcp_context *context, struct in6_addr *addr) +static void mark_context_used(struct state *state, struct in6_addr *addr) { + struct dhcp_context *context; + /* Mark that we have an address for this prefix. */ #ifdef OPTION6_PREFIX_CLASS - for (; context; context = context->current) + for (context = state->context; context; context = context->current) if (is_same_net6(addr, &context->start6, context->prefix) && (!state->send_prefix_class || state->send_prefix_class == prefix_class_from_context(context))) context->flags |= CONTEXT_USED; #else - (void)state; /* warning */ - for (; context; context = context->current) + for (context = state->context; context; context = context->current) if (is_same_net6(addr, &context->start6, context->prefix)) context->flags |= CONTEXT_USED; #endif From b5d9a362b4027455b3bc382ccb4e773905973410 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Tue, 24 Sep 2013 09:44:33 +0100 Subject: [PATCH 22/67] Fix TFTP script action, broken a few commits ago. --- src/helper.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/helper.c b/src/helper.c index 65410f5..d6bcd63 100644 --- a/src/helper.c +++ b/src/helper.c @@ -291,7 +291,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) /* file length */ if (data.action == ACTION_TFTP) - sprintf(daemon->dhcp_buff, "%u", data.hwaddr_len); + sprintf(is6 ? daemon->packet : daemon->dhcp_buff, "%u", data.iaid); #ifdef HAVE_LUASCRIPT if (daemon->luascript) @@ -309,7 +309,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) lua_setfield(lua, -2, "destination_address"); lua_pushstring(lua, hostname); lua_setfield(lua, -2, "file_name"); - lua_pushstring(lua, daemon->dhcp_buff); + lua_pushstring(lua, is6 ? daemon->packet : daemon->dhcp_buff); lua_setfield(lua, -2, "file_size"); lua_call(lua, 2, 0); /* pass 2 values, expect 0 */ } @@ -739,13 +739,13 @@ void queue_tftp(off_t file_len, char *filename, union mysockaddr *peer) buf->action = ACTION_TFTP; buf->hostname_len = filename_len; - buf->hwaddr_len = file_len; + buf->iaid = file_len; if ((buf->flags = peer->sa.sa_family) == AF_INET) buf->addr = peer->in.sin_addr; #ifdef HAVE_IPV6 else - memcpy(buf->hwaddr, &peer->in6.sin6_addr, IN6ADDRSZ); + buf->addr6 = peer->in6.sin6_addr; #endif memcpy((unsigned char *)(buf+1), filename, filename_len); From 408c368fa52cd0018f0191587d39d506cf121a66 Mon Sep 17 00:00:00 2001 From: Vladislav Grishenko Date: Tue, 24 Sep 2013 16:18:49 +0100 Subject: [PATCH 23/67] Remove unused variable warnings when omitting stuff at compile-time. --- src/dhcp-common.c | 4 ++++ src/dhcp6.c | 1 + src/dnsmasq.c | 4 ++++ src/lease.c | 5 +++++ src/netlink.c | 2 ++ src/network.c | 2 ++ src/rfc3315.c | 4 ++++ 7 files changed, 22 insertions(+) diff --git a/src/dhcp-common.c b/src/dhcp-common.c index 7b37daf..7618452 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -627,6 +627,8 @@ int lookup_dhcp_opt(int prot, char *name) const struct opttab_t *t; int i; + (void)prot; + #ifdef HAVE_DHCP6 if (prot == AF_INET6) t = opttab6; @@ -646,6 +648,8 @@ int lookup_dhcp_len(int prot, int val) const struct opttab_t *t; int i; + (void)prot; + #ifdef HAVE_DHCP6 if (prot == AF_INET6) t = opttab6; diff --git a/src/dhcp6.c b/src/dhcp6.c index 146e693..cc95937 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -552,6 +552,7 @@ static int make_duid1(int index, unsigned int type, char *mac, size_t maclen, vo unsigned char *p; (void)index; + (void)parm; if (type >= 256) return 1; diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 8dcb1d4..f1c9500 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -51,8 +51,10 @@ int main (int argc, char **argv) cap_user_header_t hdr = NULL; cap_user_data_t data = NULL; #endif +#if defined(HAVE_DHCP) || defined(HAVE_DHCP6) struct dhcp_context *context; struct dhcp_relay *relay; +#endif #ifdef LOCALEDIR setlocale(LC_ALL, ""); @@ -1231,6 +1233,8 @@ void poll_resolv(int force, int do_reload, time_t now) void clear_cache_and_reload(time_t now) { + (void)now; + if (daemon->port != 0) cache_reload(); diff --git a/src/lease.c b/src/lease.c index 02ca094..4b4d10a 100644 --- a/src/lease.c +++ b/src/lease.c @@ -788,6 +788,7 @@ void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr, #endif (void)force; + (void)now; if (hw_len != lease->hwaddr_len || hw_type != lease->hwaddr_type || @@ -956,6 +957,8 @@ void lease_set_hostname(struct dhcp_lease *lease, char *name, int auth, char *do void lease_set_interface(struct dhcp_lease *lease, int interface, time_t now) { + (void)now; + if (lease->last_interface == interface) return; @@ -984,6 +987,8 @@ int do_script_run(time_t now) { struct dhcp_lease *lease; + (void)now; + #ifdef HAVE_DBUS /* If we're going to be sending DBus signals, but the connection is not yet up, delay everything until it is. */ diff --git a/src/netlink.c b/src/netlink.c index 2bcaf01..d093988 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -402,6 +402,8 @@ static int nl_async(struct nlmsghdr *h) static void nl_newaddress(time_t now) { + (void)now; + if (option_bool(OPT_CLEVERBIND) || daemon->doing_dhcp6 || daemon->relay6 || daemon->doing_ra) enumerate_interfaces(0); diff --git a/src/network.c b/src/network.c index 576a7cf..fc0346e 100644 --- a/src/network.c +++ b/src/network.c @@ -709,6 +709,8 @@ static struct listener *create_listeners(union mysockaddr *addr, int do_tftp, in struct listener *l = NULL; int fd = -1, tcpfd = -1, tftpfd = -1; + (void)do_tftp; + if (daemon->port != 0) { fd = make_sock(addr, SOCK_DGRAM, dienow); diff --git a/src/rfc3315.c b/src/rfc3315.c index adca102..9618ffc 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -1711,7 +1711,11 @@ static void calculate_times(struct dhcp_context *context, unsigned int *min_time static void update_leases(struct state *state, struct dhcp_context *context, struct in6_addr *addr, unsigned int lease_time, time_t now) { struct dhcp_lease *lease = lease6_find_by_addr(addr, 128, 0); +#ifdef HAVE_SCRIPT struct dhcp_netid *tagif = run_tag_if(state->tags); +#endif + + (void)context; if (!lease) lease = lease6_allocate(addr, state->ia_type == OPTION6_IA_NA ? LEASE_NA : LEASE_TA); From 8939c95fd69faef32cbfcb9b6b7a107ee2c6564e Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 25 Sep 2013 11:49:34 +0100 Subject: [PATCH 24/67] Don't extract MAC address from ND table when DHCPv6 request is from a relay. --- src/dhcp6.c | 102 +++++++++++++++++++++++++------------------------- src/dnsmasq.h | 10 ++--- src/rfc3315.c | 47 +++++++++++++---------- 3 files changed, 84 insertions(+), 75 deletions(-) diff --git a/src/dhcp6.c b/src/dhcp6.c index cc95937..ef4c495 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -29,7 +29,7 @@ struct iface_param { struct mac_param { struct in6_addr *target; - unsigned char mac[DHCP_CHADDR_MAX]; + unsigned char *mac; unsigned int maclen; }; @@ -99,7 +99,6 @@ void dhcp6_packet(time_t now) struct dhcp_context *context; struct dhcp_relay *relay; struct iface_param parm; - struct mac_param mac_param; struct cmsghdr *cmptr; struct msghdr msg; int if_index = 0; @@ -145,8 +144,6 @@ void dhcp6_packet(time_t now) if ((port = relay_reply6(&from, sz, ifr.ifr_name)) == 0) { - int i; - for (tmp = daemon->if_except; tmp; tmp = tmp->next) if (tmp->name && wildcard_match(tmp->name, ifr.ifr_name)) return; @@ -182,48 +179,6 @@ void dhcp6_packet(time_t now) if (!iface_enumerate(AF_INET6, &parm, complete_context6)) return; - /* Recieving a packet from a host does not populate the neighbour - cache, so we send a neighbour discovery request if we can't - find the sender. Repeat a few times in case of packet loss. */ - - for (i = 0; i < 5; i++) - { - struct timespec ts; - struct neigh_packet *neigh; - struct sockaddr_in6 addr; - - mac_param.target = &from.sin6_addr; - mac_param.maclen = 0; - - iface_enumerate(AF_UNSPEC, &mac_param, find_mac); - - if (mac_param.maclen != 0) - break; - - save_counter(0); - neigh = expand(sizeof(struct neigh_packet)); - neigh->type = ND_NEIGHBOR_SOLICIT; - neigh->code = 0; - neigh->reserved = 0; - neigh->target = from.sin6_addr; - - memset(&addr, 0, sizeof(addr)); -#ifdef HAVE_SOCKADDR_SA_LEN - addr.sin6_len = sizeof(struct sockaddr_in6); -#endif - addr.sin6_family = AF_INET6; - addr.sin6_port = htons(IPPROTO_ICMPV6); - addr.sin6_addr = from.sin6_addr; - addr.sin6_scope_id = from.sin6_scope_id; - - sendto(daemon->icmp6fd, daemon->outpacket.iov_base, save_counter(0), 0, - (struct sockaddr *)&addr, sizeof(addr)); - - ts.tv_sec = 0; - ts.tv_nsec = 100000000; /* 100ms */ - nanosleep(&ts, NULL); - } - if (daemon->if_names || daemon->if_addrs) { @@ -244,8 +199,7 @@ void dhcp6_packet(time_t now) inet_pton(AF_INET6, ALL_SERVERS, &all_servers); if (!IN6_ARE_ADDR_EQUAL(&dst_addr, &all_servers)) - relay_upstream6(parm.relay, sz, &from.sin6_addr, from.sin6_scope_id, - mac_param.maclen == 0 ? NULL : &mac_param.mac[0], mac_param.maclen, ARPHRD_ETHER); + relay_upstream6(parm.relay, sz, &from.sin6_addr, from.sin6_scope_id); return; } @@ -256,8 +210,7 @@ void dhcp6_packet(time_t now) lease_prune(NULL, now); /* lose any expired leases */ port = dhcp6_reply(parm.current, if_index, ifr.ifr_name, &parm.fallback, - sz, IN6_IS_ADDR_MULTICAST(&from.sin6_addr), now, - mac_param.maclen == 0 ? NULL : &mac_param.mac[0], mac_param.maclen, ARPHRD_ETHER); + sz, &from.sin6_addr, now); lease_update_file(now); lease_update_dns(0); @@ -276,6 +229,55 @@ void dhcp6_packet(time_t now) } } +void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, unsigned int *maclenp, unsigned int *mactypep) +{ + /* Recieving a packet from a host does not populate the neighbour + cache, so we send a neighbour discovery request if we can't + find the sender. Repeat a few times in case of packet loss. */ + + struct neigh_packet neigh; + struct sockaddr_in6 addr; + struct mac_param mac_param; + int i; + + neigh.type = ND_NEIGHBOR_SOLICIT; + neigh.code = 0; + neigh.reserved = 0; + neigh.target = *client; + + memset(&addr, 0, sizeof(addr)); +#ifdef HAVE_SOCKADDR_SA_LEN + addr.sin6_len = sizeof(struct sockaddr_in6); +#endif + addr.sin6_family = AF_INET6; + addr.sin6_port = htons(IPPROTO_ICMPV6); + addr.sin6_addr = *client; + addr.sin6_scope_id = iface; + + mac_param.target = client; + mac_param.maclen = 0; + mac_param.mac = mac; + + for (i = 0; i < 5; i++) + { + struct timespec ts; + + iface_enumerate(AF_UNSPEC, &mac_param, find_mac); + + if (mac_param.maclen != 0) + break; + + sendto(daemon->icmp6fd, &neigh, sizeof(neigh), 0, (struct sockaddr *)&addr, sizeof(addr)); + + ts.tv_sec = 0; + ts.tv_nsec = 100000000; /* 100ms */ + nanosleep(&ts, NULL); + } + + *maclenp = mac_param.maclen; + *mactypep = ARPHRD_ETHER; +} + static int find_mac(int family, char *addrp, char *mac, size_t maclen, void *parmv) { struct mac_param *parm = parmv; diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 2d9a3a5..b652a91 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -1212,15 +1212,15 @@ struct dhcp_config *config_find_by_address6(struct dhcp_config *configs, struct int prefix, u64 addr); void make_duid(time_t now); void dhcp_construct_contexts(time_t now); +void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, + unsigned int *maclenp, unsigned int *mactypep); #endif - + /* rfc3315.c */ #ifdef HAVE_DHCP6 unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name, - struct in6_addr *fallback, size_t sz, int is_multicast, time_t now, - unsigned char *mac, unsigned int mac_len, unsigned int mac_type); -void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id, - unsigned char *mac, unsigned int mac_len, unsigned int mac_type); + struct in6_addr *fallback, size_t sz, struct in6_addr *client_addr, time_t now); +void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id); unsigned short relay_reply6( struct sockaddr_in6 *peer, ssize_t sz, char *arrival_interface); #endif diff --git a/src/rfc3315.c b/src/rfc3315.c index 9618ffc..11b0da5 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -29,14 +29,15 @@ struct state { char *iface_name; void *packet_options, *end; struct dhcp_netid *tags, *context_tags; - unsigned char *mac; + unsigned char mac[DHCP_CHADDR_MAX]; unsigned int mac_len, mac_type; #ifdef OPTION6_PREFIX_CLASS struct prefix_class *send_prefix_class; #endif }; -static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, int is_unicast, time_t now); +static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, + struct in6_addr *client_addr, int is_unicast, time_t now); static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_t sz, int is_unicast, time_t now); static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_opts); static void log6_packet(struct state *state, char *type, struct in6_addr *addr, char *string); @@ -67,8 +68,7 @@ static void calculate_times(struct dhcp_context *context, unsigned int *min_time unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name, - struct in6_addr *fallback, size_t sz, int is_unicast, time_t now, - unsigned char *mac, unsigned int mac_len, unsigned int mac_type) + struct in6_addr *fallback, size_t sz, struct in6_addr *client_addr, time_t now) { struct dhcp_vendor *vendor; int msg_type; @@ -88,20 +88,20 @@ unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *if state.interface = interface; state.iface_name = iface_name; state.fallback = fallback; - state.mac = mac; - state.mac_len = mac_len; - state.mac_type = mac_type; + state.mac_len = 0; state.tags = NULL; state.link_address = NULL; - if (dhcp6_maybe_relay(&state, daemon->dhcp_packet.iov_base, sz, is_unicast, now)) + if (dhcp6_maybe_relay(&state, daemon->dhcp_packet.iov_base, sz, client_addr, + IN6_IS_ADDR_MULTICAST(client_addr), now)) return msg_type == DHCP6RELAYFORW ? DHCPV6_SERVER_PORT : DHCPV6_CLIENT_PORT; return 0; } /* This cost me blood to write, it will probably cost you blood to understand - srk. */ -static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, int is_unicast, time_t now) +static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, + struct in6_addr *client_addr, int is_unicast, time_t now) { void *end = inbuff + sz; void *opts = inbuff + 34; @@ -116,9 +116,14 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, int i /* if link_address != NULL if points to the link address field of the innermost nested RELAYFORW message, which is where we find the address of the network on which we can allocate an address. - Recalculate the available contexts using that information. */ + Recalculate the available contexts using that information. + + link_address == NULL means there's no relay in use, so we try and find the client's + MAC address from the local ND cache. */ - if (state->link_address) + if (!state->link_address) + get_client_mac(client_addr, state->interface, state->mac, &state->mac_len, &state->mac_type); + else { struct dhcp_context *c; state->context = NULL; @@ -146,7 +151,7 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, int i return 0; } } - + if (!state->context) { my_syslog(MS_DHCP | LOG_WARNING, @@ -193,9 +198,9 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, int i /* RFC-6939 */ if ((opt = opt6_find(opts, end, OPTION6_CLIENT_MAC, 3))) { - state->mac = opt6_ptr(opt, 2); state->mac_type = opt6_uint(opt, 0, 2); state->mac_len = opt6_len(opt) - 2; + memcpy(&state->mac[0], opt6_ptr(opt, 2), state->mac_len); } for (opt = opts; opt; opt = opt6_next(opt, end)) @@ -209,7 +214,7 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, int i state->link_address = &align; /* zero is_unicast since that is now known to refer to the relayed packet, not the original sent by the client */ - if (!dhcp6_maybe_relay(state, opt6_ptr(opt, 0), opt6_len(opt), 0, now)) + if (!dhcp6_maybe_relay(state, opt6_ptr(opt, 0), opt6_len(opt), client_addr, 0, now)) return 0; } else if (opt6_type(opt) != OPTION6_CLIENT_MAC) @@ -1961,8 +1966,7 @@ static unsigned int opt6_uint(unsigned char *opt, int offset, int size) return ret; } -void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id, - unsigned char *mac, unsigned int mac_len, unsigned int mac_type ) +void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer_address, u32 scope_id) { /* ->local is same value for all relays on ->current chain */ @@ -1972,9 +1976,12 @@ void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer int msg_type = *inbuff; int hopcount; struct in6_addr multicast; + unsigned int maclen, mactype; + unsigned char mac[DHCP_CHADDR_MAX]; inet_pton(AF_INET6, ALL_SERVERS, &multicast); - + get_client_mac(peer_address, scope_id, mac, &maclen, &mactype); + /* source address == relay address */ from.addr.addr6 = relay->local.addr.addr6; @@ -2000,11 +2007,11 @@ void relay_upstream6(struct dhcp_relay *relay, ssize_t sz, struct in6_addr *peer memcpy(&header[18], peer_address, IN6ADDRSZ); /* RFC-6939 */ - if (mac) + if (maclen != 0) { o = new_opt6(OPTION6_CLIENT_MAC); - put_opt6_short(mac_type); - put_opt6(mac, mac_len); + put_opt6_short(mactype); + put_opt6(mac, maclen); end_opt6(o); } From 861c89141a828939cd5266866dfba89cacfba259 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 25 Sep 2013 15:30:30 +0100 Subject: [PATCH 25/67] Change rules for constructing DHCPv6 ranges. --- CHANGELOG | 5 +++++ man/dnsmasq.8 | 10 +++------- src/dhcp6.c | 12 +++++++----- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index d001a3d..c0c6661 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -119,6 +119,11 @@ version 2.67 6939 for this to work. It always works for directly connected clients. Thanks to Vladislav Grishenko for prompting this feature. + + Remove the rule for constructed DHCP ranges that the local + address must be either the first or last address in the + range. This was originally to avoid SLAAC addresses, but + we now explicitly autoconfig and privacy addresses instead. version 2.66 diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index e313d54..2b1570a 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -652,24 +652,20 @@ This forms a template which describes how to create ranges, based on the address .B --dhcp-range=::1,::400,constructor:eth0 -will look for addresses of the form ::1 or :400 on +will look for addresses on eth0 and then create a range from ::1 to ::400. If the interface is assigned more than one network, then the corresponding ranges will be automatically created, and then deprecated and finally removed again as the address is deprecated and then deleted. The interface name may have a final "*" wildcard. Note -that just any address on eth0 will not do: the non-prefix part must be -equal either the start or end address given in the dhcp-range. This is -to prevent prefixes becoming perpetual if the interface -gains a SLAAC address for the prefix when it is advertised by dnsmasq. +that just any address on eth0 will not do: it must not be an +autoconfigured or privacy address, or be deprecated. If a dhcp-range is only being used for stateless DHCP and/or SLAAC, then the address can be simply :: .B --dhcp-range=::,constructor:eth0 -This removes the condition above, and will pick up the prefix from any address on eth0 which is NOT -autoconfigured, slaac, temporary or deprecated. There is a variant of the constructor: syntax using the keyword .B constructor-noauth. diff --git a/src/dhcp6.c b/src/dhcp6.c index ef4c495..c8b1d85 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -602,6 +602,12 @@ static int construct_worker(struct in6_addr *local, int prefix, IN6_IS_ADDR_MULTICAST(local)) return 1; + if (!(flags & IFACE_PERMANENT)) + return 1; + + if (flags & IFACE_DEPRECATED) + return 1; + if (!indextoname(daemon->doing_dhcp6 ? daemon->dhcp6fd : daemon->icmp6fd, if_index, ifrn_name)) return 0; @@ -618,11 +624,7 @@ static int construct_worker(struct in6_addr *local, int prefix, } } - else if ((addr6part(local) == addr6part(&template->start6) || - addr6part(local) == addr6part(&template->end6) || - (IN6_IS_ADDR_UNSPECIFIED(&template->start6) && - IFACE_PERMANENT == (flags & (IFACE_PERMANENT | IFACE_DEPRECATED)))) && - wildcard_match(template->template_interface, ifrn_name)) + else if (wildcard_match(template->template_interface, ifrn_name)) { start6 = *local; setaddr6part(&start6, addr6part(&template->start6)); From a810559b243560d26a9ccde7330aadafeb7d4cbe Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 25 Sep 2013 15:36:00 +0100 Subject: [PATCH 26/67] daemon->icmp6fd is always valid when doing DHCPv6 now. --- src/dhcp-common.c | 2 +- src/dhcp6.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dhcp-common.c b/src/dhcp-common.c index 7618452..7e99fc9 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -827,7 +827,7 @@ void log_context(int family, struct dhcp_context *context) template = p; p += sprintf(p, ", "); - if (indextoname(daemon->doing_dhcp6 ? daemon->dhcp6fd : daemon->icmp6fd, context->if_index, ifrn_name)) + if (indextoname(daemon->icmp6fd, context->if_index, ifrn_name)) sprintf(p, "%s for %s", (context->flags & CONTEXT_OLD) ? "old prefix" : "constructed", ifrn_name); } else if (context->flags & CONTEXT_TEMPLATE) diff --git a/src/dhcp6.c b/src/dhcp6.c index c8b1d85..1a7aa48 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -608,7 +608,7 @@ static int construct_worker(struct in6_addr *local, int prefix, if (flags & IFACE_DEPRECATED) return 1; - if (!indextoname(daemon->doing_dhcp6 ? daemon->dhcp6fd : daemon->icmp6fd, if_index, ifrn_name)) + if (!indextoname(daemon->icmp6fd, if_index, ifrn_name)) return 0; for (template = daemon->dhcp6; template; template = template->next) From 42b44a591b95d5cfc066f103888b974b1187ee3f Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 27 Sep 2013 14:38:45 +0100 Subject: [PATCH 27/67] Add contrib/mactable --- contrib/mactable/macscript | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 contrib/mactable/macscript diff --git a/contrib/mactable/macscript b/contrib/mactable/macscript new file mode 100755 index 0000000..8d807c5 --- /dev/null +++ b/contrib/mactable/macscript @@ -0,0 +1,30 @@ +#!/bin/bash + +STATUS_FILE="/tmp/dnsmasq-ip-mac.status" + +# Script for dnsmasq lease-change hook. +# Maintains the above file with a IP address/MAC address pairs, +# one lease per line. Works with IPv4 and IPv6 leases, file is +# atomically updated, so no races for users of the data. + +action="$1" +mac="$2" # IPv4 +ip="$3" + +if [ -n "$DNSMASQ_IAID" ]; then + if [ -z "$DNSMASQ_MAC" -a "$action" = "old" ]; then + # MAC not known by dnsmasq, probably due to restart. + exit 0; + fi + mac="$DNSMASQ_MAC" # IPv6 +fi + +if [ "$action" = "add" -o "$action" = "old" -o "$action" = "del" ]; then + if [ -f "$STATUS_FILE" ]; then + sed "/^${ip//./\.} / d" "$STATUS_FILE" > "$STATUS_FILE".new + fi + if [ "$action" = "add" -o "$action" = "old" ]; then + echo "$ip $mac" >> "$STATUS_FILE".new + fi + mv "$STATUS_FILE".new "$STATUS_FILE" # atomic update. +fi From 10bd29265b3aebf149bc5e93e91462732c9240de Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 27 Sep 2013 21:07:30 +0100 Subject: [PATCH 28/67] macscript: create file if it doesn't exist. --- contrib/mactable/macscript | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/contrib/mactable/macscript b/contrib/mactable/macscript index 8d807c5..44a4477 100755 --- a/contrib/mactable/macscript +++ b/contrib/mactable/macscript @@ -11,20 +11,26 @@ action="$1" mac="$2" # IPv4 ip="$3" -if [ -n "$DNSMASQ_IAID" ]; then - if [ -z "$DNSMASQ_MAC" -a "$action" = "old" ]; then - # MAC not known by dnsmasq, probably due to restart. - exit 0; - fi - mac="$DNSMASQ_MAC" # IPv6 +# ensure it always exists. + +if [ ! -f "$STATUS_FILE" ]; then + touch "$STATUS_FILE" fi +if [ -n "$DNSMASQ_IAID" ]; then + mac="$DNSMASQ_MAC" # IPv6 +fi + +# worry about an add or old action when the MAC address is not known: +# leave any old one in place in that case. + if [ "$action" = "add" -o "$action" = "old" -o "$action" = "del" ]; then - if [ -f "$STATUS_FILE" ]; then + if [ -n "$mac" -o "$action" = "del" ]; then sed "/^${ip//./\.} / d" "$STATUS_FILE" > "$STATUS_FILE".new + + if [ "$action" = "add" -o "$action" = "old" ]; then + echo "$ip $mac" >> "$STATUS_FILE".new + fi + mv "$STATUS_FILE".new "$STATUS_FILE" # atomic update. fi - if [ "$action" = "add" -o "$action" = "old" ]; then - echo "$ip $mac" >> "$STATUS_FILE".new - fi - mv "$STATUS_FILE".new "$STATUS_FILE" # atomic update. fi From 8f3194f7ac4590deeaf427fa40aa0f8d53588c05 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 30 Sep 2013 15:04:58 +0100 Subject: [PATCH 29/67] Do multicast interface selection portably for router advertisements. --- src/radv.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/radv.c b/src/radv.c index d2b3977..b1f2bc1 100644 --- a/src/radv.c +++ b/src/radv.c @@ -391,10 +391,13 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de addr.sin6_scope_id = iface; } else - inet_pton(AF_INET6, ALL_NODES, &addr.sin6_addr); + { + inet_pton(AF_INET6, ALL_NODES, &addr.sin6_addr); + setsockopt(daemon->icmp6fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, &iface, sizeof(iface)); + } - send_from(daemon->icmp6fd, 0, daemon->outpacket.iov_base, save_counter(0), - (union mysockaddr *)&addr, (struct all_addr *)&parm.link_local, iface); + while (sendto(daemon->icmp6fd, daemon->outpacket.iov_base, save_counter(0), 0, + (struct sockaddr *)&addr, sizeof(addr)) == -1 && retry_send()); } From 2f9fd1dcc52422af41c9b983a82f63ab39ebe59d Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Tue, 1 Oct 2013 09:54:41 +0100 Subject: [PATCH 30/67] Fix FTBFS when NO_IPV6 defined. --- src/helper.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/helper.c b/src/helper.c index d6bcd63..e979b0d 100644 --- a/src/helper.c +++ b/src/helper.c @@ -61,6 +61,9 @@ struct script_data #else time_t expires; #endif +#ifdef HAVE_TFTP + off_t file_len; +#endif #ifdef HAVE_DHCP6 struct in6_addr addr6; int iaid, vendorclass_count; @@ -289,10 +292,12 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) inet_ntop(AF_INET6, &data.addr6, daemon->addrbuff, ADDRSTRLEN); #endif +#ifdef HAVE_TFTP /* file length */ if (data.action == ACTION_TFTP) - sprintf(is6 ? daemon->packet : daemon->dhcp_buff, "%u", data.iaid); - + sprintf(is6 ? daemon->packet : daemon->dhcp_buff, "%lu", (unsigned long)data.file_len); +#endif + #ifdef HAVE_LUASCRIPT if (daemon->luascript) { @@ -739,7 +744,7 @@ void queue_tftp(off_t file_len, char *filename, union mysockaddr *peer) buf->action = ACTION_TFTP; buf->hostname_len = filename_len; - buf->iaid = file_len; + buf->file_len = file_len; if ((buf->flags = peer->sa.sa_family) == AF_INET) buf->addr = peer->in.sin_addr; From d5c35a59b0aefb51be5e8e524dba72e09711cef1 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Tue, 1 Oct 2013 20:28:22 +0100 Subject: [PATCH 31/67] Merge new messages into .po files. --- po/de.po | 878 ++++++++++++++++++++++++---------------------- po/es.po | 870 ++++++++++++++++++++++++---------------------- po/fi.po | 983 +++++++++++++++++++++++++++------------------------- po/fr.po | 874 ++++++++++++++++++++++++---------------------- po/id.po | 931 ++++++++++++++++++++++++++----------------------- po/it.po | 983 +++++++++++++++++++++++++++------------------------- po/no.po | 911 +++++++++++++++++++++++++----------------------- po/pl.po | 874 ++++++++++++++++++++++++---------------------- po/pt_BR.po | 983 +++++++++++++++++++++++++++------------------------- po/ro.po | 911 +++++++++++++++++++++++++----------------------- 10 files changed, 4849 insertions(+), 4349 deletions(-) diff --git a/po/de.po b/po/de.po index 0db9c99..0eee6d5 100644 --- a/po/de.po +++ b/po/de.po @@ -26,17 +26,17 @@ msgstr "" msgid "failed to load names from %s: %s" msgstr "Fehler beim Laden der Namen von %s: %s" -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, c-format msgid "bad address at %s line %d" msgstr "Fehlerhafte Adresse in %s Zeile %d" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "Fehlerhafter Name in %s Zeile %d" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "%s gelesen - %d Adressen" @@ -45,37 +45,37 @@ msgstr "%s gelesen - %d Adressen" msgid "cleared cache" msgstr "Cache geleert" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "Keine IPv4-Adresse für %s gefunden" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "%s ist ein CNAME, weise es der DHCP-Lease von %s nicht zu" -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "Name %s wurde dem DHCP-Lease von %s nicht zugewiesen, da der Name in %s bereits mit Adresse %s existiert" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "Zeit %lu" -#: cache.c:1163 +#: cache.c:1131 #, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "Cache Größe %d, %d/%d Cache-Einfügungen verwendeten nicht abgelaufene Cache-Einträge wieder." -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "%u weitergeleitete Anfragen, %u lokal beantwortete Anfragen" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "Server %s#%d: %u Anfragen gesendet, %u erneut versucht oder fehlgeschlagen" @@ -85,551 +85,563 @@ msgstr "Server %s#%d: %u Anfragen gesendet, %u erneut versucht oder fehlgeschlag msgid "failed to seed the random number generator: %s" msgstr "Konnte den Zufallszahlengenerator nicht initialisieren: %s" -#: util.c:189 +#: util.c:192 msgid "failed to allocate memory" msgstr "Konnte Speicher nicht belegen" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "Speicher nicht verfügbar" -#: util.c:237 +#: util.c:240 #, c-format msgid "cannot create pipe: %s" msgstr "Konnte Pipe nicht erzeugen: %s" -#: util.c:245 +#: util.c:248 #, c-format msgid "failed to allocate %d bytes" msgstr "Konnte %d Bytes nicht belegen" # @Simon: not perfect but I cannot get nearer right now. -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "unendlich" -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "Lokale abzuhörende Adresse(n) angeben." -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "IP-Adresse für alle Hosts in angebenen Domänen festlegen." # FIXME: the English test is not to the point. Just use a shortened description # from the manpage instead. -- MA -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "Für private Adressbereiche nach RFC1918 \"keine solche Domain\" liefern." -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "Diese IP-Adresse als NXDOMAIN interpretieren (wehrt \"Suchhilfen\" ab)." -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "Größe des Caches (Zahl der Einträge) festlegen (Voreinstellung: %s)." -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "Konfigurationsdatei festlegen (Voreinstellung: %s)." -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "NICHT in den Hintergrund gehen: Betrieb im Debug-Modus" -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "Anfragen ohne Domänen-Teil NICHT weiterschicken." -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "Für lokale Einträge MX-Einträge liefern, die auf sich selbst zeigen." -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "Erweitere einfache Namen in /etc/hosts mit der Domänen-Endung." -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "'unechte' DNS-Anfragen von Windows-Rechnern nicht weiterleiten" # @Simon: I'm a bit unsure about "spurious" -#: option.c:297 +#: option.c:303 msgid "Enable DHCP in the range given with lease duration." msgstr "DHCP für angegebenen Bereich und Dauer einschalten" -#: option.c:298 +#: option.c:304 #, c-format msgid "Change to this group after startup (defaults to %s)." msgstr "Nach dem Start in diese Benutzergruppe wechseln (Voreinstellung %s)." -#: option.c:299 +#: option.c:305 msgid "Set address or hostname for a specified machine." msgstr "Adresse oder Hostnamen für einen angegebenen Computer setzen." -#: option.c:300 +#: option.c:306 msgid "Read DHCP host specs from file." msgstr "DHCP-Host-Angaben aus Datei lesen." -#: option.c:301 +#: option.c:307 msgid "Read DHCP option specs from file." msgstr "DHCP-Optionen aus Datei lesen." -#: option.c:302 +#: option.c:308 msgid "Evaluate conditional tag expression." msgstr "Auswertung eines Ausdrucks bedingter Marken." -#: option.c:303 +#: option.c:309 #, c-format msgid "Do NOT load %s file." msgstr "%s-Datei NICHT laden." -#: option.c:304 +#: option.c:310 #, c-format msgid "Specify a hosts file to be read in addition to %s." msgstr "Hosts-Datei festlegen, die zusätzlich zu %s gelesen wird." -#: option.c:305 +#: option.c:311 msgid "Specify interface(s) to listen on." msgstr "Schnittstelle(n) zum Empfang festlegen." -#: option.c:306 +#: option.c:312 msgid "Specify interface(s) NOT to listen on." msgstr "Schnittstelle(n) festlegen, die NICHT empfangen sollen." -#: option.c:307 +#: option.c:313 msgid "Map DHCP user class to tag." msgstr "DHCP-Benutzerklasse auf Marke abbilden." -#: option.c:308 +#: option.c:314 msgid "Map RFC3046 circuit-id to tag." msgstr "RFC3046 \"circuit-id\" auf Marke abbilden." -#: option.c:309 +#: option.c:315 msgid "Map RFC3046 remote-id to tag." msgstr "RFC3046 \"remote-id\" auf Marke abbilden." -#: option.c:310 +#: option.c:316 msgid "Map RFC3993 subscriber-id to tag." msgstr "RFC3993 \"subscriber-id\" auf Marke abbilden." -#: option.c:311 +#: option.c:317 msgid "Don't do DHCP for hosts with tag set." msgstr "Kein DHCP für Hosts mit gesetzter Marke verwenden." -#: option.c:312 +#: option.c:318 msgid "Force broadcast replies for hosts with tag set." msgstr "Rundsendung für Hosts mit gesetzter Marke erzwingen." -#: option.c:313 +#: option.c:319 msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "NICHT in den Hintergrund wechseln, NICHT im Debug-Modus laufen." -#: option.c:314 +#: option.c:320 msgid "Assume we are the only DHCP server on the local network." msgstr "Voraussetzen, dass wir der einzige DHCP-Server im lokalen Netz sind." -#: option.c:315 +#: option.c:321 #, c-format msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "Festlegen, wo DHCP-Leases gespeichert werden (Voreinstellung %s)." -#: option.c:316 +#: option.c:322 msgid "Return MX records for local hosts." msgstr "MX-Einträge für lokale Hosts liefern." -#: option.c:317 +#: option.c:323 msgid "Specify an MX record." msgstr "Einen MX-Eintrag festlegen." -#: option.c:318 +#: option.c:324 msgid "Specify BOOTP options to DHCP server." msgstr "BOOTP-Optionen für DHCP-Server festlegen." -#: option.c:319 +#: option.c:325 #, c-format msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "%s-Datei NICHT abfragen, nur bei SIGHUP neu laden." -#: option.c:320 +#: option.c:326 msgid "Do NOT cache failed search results." msgstr "Fehlerhafte Suchergebnisse NICHT zwischenspeichern." -#: option.c:321 +#: option.c:327 #, c-format msgid "Use nameservers strictly in the order given in %s." msgstr "Namensserver streng in der in %s angegebenen Reihenfolge verwenden." -#: option.c:322 +#: option.c:328 msgid "Specify options to be sent to DHCP clients." msgstr "Optionen festlegen, die an DHCP-Klienten gesendet werden." -#: option.c:323 +#: option.c:329 msgid "DHCP option sent even if the client does not request it." msgstr "DHCP-Option, die selbst ohne Klientenanfrage gesendet wird." -#: option.c:324 +#: option.c:330 msgid "Specify port to listen for DNS requests on (defaults to 53)." msgstr "Port zum Abhören der DNS-Anfragen festlegen (53 voreingestellt)." -#: option.c:325 +#: option.c:331 #, c-format msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." msgstr "Maximale unterstützte UDP-Paketgröße für EDNS.0 (Voreinstellung %s)." -#: option.c:326 +#: option.c:332 msgid "Log DNS queries." msgstr "DNS-Anfragen protokollieren." -#: option.c:327 +#: option.c:333 msgid "Force the originating port for upstream DNS queries." msgstr "Ausgehenden Port erzwingen für DNS-Anfragen an vorgelagerte Server." -#: option.c:328 +#: option.c:334 msgid "Do NOT read resolv.conf." msgstr "resolv.conf NICHT lesen." -#: option.c:329 +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "Pfad zu resolv.conf festlegen (%s voreingestellt)." -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "Adresse(n) vorgelagerter Server festlegen, optional mit Domänen." -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "Anfragen für angegebene Domänen niemals weiterleiten." -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "Domäne festlegen, die für DHCP-Leases zugewiesen wird." -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "Voreingestelltes Ziel für MX-Einträge festlegen." -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "Gültigkeitsdauer für Antworten aus /etc/hosts festlegen." -#: option.c:335 +#: option.c:341 msgid "Specify time-to-live in seconds for negative caching." msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen." -#: option.c:336 +#: option.c:342 msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen." -#: option.c:337 +#: option.c:343 #, c-format msgid "Change to this user after startup. (defaults to %s)." msgstr "Nach dem Start diese Benutzerrechte annehmen (%s voreingestellt)." -#: option.c:338 +#: option.c:344 msgid "Map DHCP vendor class to tag." msgstr "DHCP-\"vendor class\" auf Marke abbilden." -#: option.c:339 +#: option.c:345 msgid "Display dnsmasq version and copyright information." msgstr "dnsmasq-Version und Urheberrecht anzeigen." -#: option.c:340 +#: option.c:346 msgid "Translate IPv4 addresses from upstream servers." msgstr "IPv4-Adressen von vorgelagerten Servern übersetzen." -#: option.c:341 +#: option.c:347 msgid "Specify a SRV record." msgstr "SRV-Eintrag festlegen." -#: option.c:342 +#: option.c:348 msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "Diese Hilfe anzeigen. Benutzen Sie --help dhcp für bekannte DHCP-Optionen." -#: option.c:343 +#: option.c:349 #, c-format msgid "Specify path of PID file (defaults to %s)." msgstr "Dateipfad für Prozesskennung (PID) festlegen (Voreinstellung: %s)." -#: option.c:344 +#: option.c:350 #, c-format msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "Höchstzahl der DHCP-Leases festlegen (%s voreingestellt)." -#: option.c:345 +#: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." msgstr "DNS-Anfragen abhängig der Emfpangsschnittstelle beantworten." -#: option.c:346 +#: option.c:352 msgid "Specify TXT DNS record." msgstr "DNS-TXT-Eintrag festlegen." -#: option.c:347 +#: option.c:353 msgid "Specify PTR DNS record." msgstr "DNS-PTR-Eintrag festlegen." -#: option.c:348 +#: option.c:354 msgid "Give DNS name to IPv4 address of interface." msgstr "Schnittstellennamen zur IPv4-Adresse des Interfaces auflösen." -#: option.c:349 +#: option.c:355 msgid "Bind only to interfaces in use." msgstr "Nur an verwendete Schnittstellen binden." -#: option.c:350 +#: option.c:356 #, c-format msgid "Read DHCP static host information from %s." msgstr "Statische DHCP-Host-Information aus %s lesen." -#: option.c:351 +#: option.c:357 msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "DBus-Schnittstelle zum Festlegen vorgelagerter Server usw. festlegen." -#: option.c:352 +#: option.c:358 msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "Auf dieser Schnittstelle kein DHCP anbieten, sondern nur DNS." -#: option.c:353 +#: option.c:359 msgid "Enable dynamic address allocation for bootp." msgstr "Dynamische Adressbelegung für bootp einschalten." -#: option.c:354 +#: option.c:360 msgid "Map MAC address (with wildcards) to option set." msgstr "MAC-Adresse (mit Jokerzeichen) auf Netzmarke abbilden." -#: option.c:355 +#: option.c:361 msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "DHCP-Anfragen von Alias-Schnittstellen für die Hauptschnittstelle beantworten." -#: option.c:356 +#: option.c:362 msgid "Disable ICMP echo address checking in the DHCP server." msgstr "ICMP-Echo-Adressprüfung im DHCP-Server abschalten." -#: option.c:357 +#: option.c:363 msgid "Shell script to run on DHCP lease creation and destruction." msgstr "Skript, das bei Erzeugung/Löschung einer DHCP-Lease laufen soll." -#: option.c:358 +#: option.c:364 msgid "Lua script to run on DHCP lease creation and destruction." msgstr "Lua-Skript, welches bei Erzeugung/Löschung eines DHCP-Leases laufen soll." -#: option.c:359 +#: option.c:365 msgid "Run lease-change scripts as this user." msgstr "Lease-Änderungs-Skript mit den Rechten dieses Nutzers ausführen." -#: option.c:360 +#: option.c:366 msgid "Read configuration from all the files in this directory." msgstr "Konfiguration aus allen Dateien in diesem Verzeichnis lesen." -#: option.c:361 +#: option.c:367 msgid "Log to this syslog facility or file. (defaults to DAEMON)" msgstr "Für diese Syslog-Anlage oder in Datei loggen (Voreinstellung DAEMON)." -#: option.c:362 +#: option.c:368 msgid "Do not use leasefile." msgstr "Keine Lease-Datei benützen." -#: option.c:363 +#: option.c:369 #, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "Höchstzahl nebenläufiger DNS-Anfragen (%s voreingestellt)." -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "DNS-Cache beim Neuladen von %s löschen." -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "Von DHCP-Clients gelieferte Hostnamen ignorieren." -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "Dateinamen und Server-Datenfehler für zusätzliche DHCP-Optionen NICHT wiederverwenden." -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "Eingebauten Nur-Lese-TFTP-Server einschalten." -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "Nur vom festgelegten Unterbaum Dateien per TFTP exportieren." -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "IP-Adresse des Klienten an tftp-root anhängen." -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "Zugriff nur auf Dateien gestatten, die dem dnsmasq aufrufenden Benutzer gehören." -#: option.c:371 +#: option.c:377 #, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "Höchstzahl nebenläufiger TFTP-Übertragungen (%s voreingestellt)." -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "TFTP-Blockgrößen-Erweiterung abschalten." -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "Bereich für vorübergehende Ports für TFTP-Übertragungen." -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "Erweiterte DHCP-Protokollierung." -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "Asynchrone Protokollierung einschalten, opt. Warteschlangenlänge festlegen." -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "DNS-Rebinding unterbinden, private IP-Bereiche bei der Auflösung ausfiltern." -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "Auflösung zu 127.0.0.0/8 erlauben, für RBL-Server." -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "DNS-Rebind-Schutz für diese Domäne sperren." -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "DNS-Anfragen immer an alle Server weiterleiten." -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "Marke setzen, wenn Klient eine entsprechende Option anfragt." -#: option.c:382 +#: option.c:388 msgid "Use alternative ports for DHCP." msgstr "Alternative Ports für DHCP verwenden." -#: option.c:383 +#: option.c:389 msgid "Specify NAPTR DNS record." msgstr "DNS-NAPTR-Eintrag festlegen." -#: option.c:384 +#: option.c:390 msgid "Specify lowest port available for DNS query transmission." msgstr "Niedrigsten verfügbaren Port für Übertragung von DNS-Anfragen festlegen." -#: option.c:385 +#: option.c:391 msgid "Use only fully qualified domain names for DHCP clients." msgstr "Für DHCP-Klienten nur vollständig bestimmte Domänennamen benutzen." # FIXME: probably typo in original message. -- MA -#: option.c:386 +#: option.c:392 msgid "Generate hostnames based on MAC address for nameless clients." msgstr "Generiere Hostnamen auf Basis der MAC-Adresse für namenlose Klienten." -#: option.c:387 +#: option.c:393 msgid "Use these DHCP relays as full proxies." msgstr "Diese DHCP-Relais als vollwertige Proxies verwenden." -#: option.c:388 +#: option.c:394 +msgid "Relay DHCP requests to a remote server" +msgstr "" + +#: option.c:395 msgid "Specify alias name for LOCAL DNS name." msgstr "Alias für LOKALEN DNS-Namen festlegen." -#: option.c:389 +#: option.c:396 msgid "Prompt to send to PXE clients." msgstr "Aufforderung, die an PXE-Klienten geschickt wird." -#: option.c:390 +#: option.c:397 msgid "Boot service for PXE menu." msgstr "Boot-Dienst für PXE-Menü." -#: option.c:391 +#: option.c:398 msgid "Check configuration syntax." msgstr "Konfigurationssyntax prüfen." -#: option.c:392 +#: option.c:399 msgid "Add requestor's MAC address to forwarded DNS queries." msgstr "Anfragende MAC-Adresse in die weiterleitende DNS-Anfrage einfügen" -#: option.c:393 +#: option.c:400 msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "Proxy-DNSSEC-Validierung-Ergebnisse von Upstream-Namensservern." -#: option.c:394 +#: option.c:401 msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "Versuche sequenzielle IP-Adressen an DHCP-Klienten zu vergeben." -#: option.c:395 +#: option.c:402 msgid "Copy connection-track mark from queries to upstream connections." msgstr "Kopiere \"connection-track mark\" von Anfragen nach Upstream-Verbindungen." -#: option.c:396 +#: option.c:403 msgid "Allow DHCP clients to do their own DDNS updates." msgstr "Erlaube DHCP-Klienten ihre eigenen DDNS-Updates durchzuführen." -#: option.c:397 +#: option.c:404 msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "Sende \"Router-Advertisments\" für Netzwerkschnittstellen, welche DHCPv6 nutzen" -#: option.c:398 +#: option.c:405 +msgid "Always send frequent router-advertisements" +msgstr "" + +#: option.c:406 msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "" -#: option.c:399 +#: option.c:407 #, fuzzy msgid "Specify host (A/AAAA and PTR) records" msgstr "Einen MX-Eintrag festlegen." -#: option.c:400 +#: option.c:408 #, fuzzy msgid "Specify arbitrary DNS resource record" msgstr "DNS-TXT-Eintrag festlegen." -#: option.c:401 +#: option.c:409 #, fuzzy msgid "Bind to interfaces in use - check for new interfaces" msgstr "unbekannte Schnittstelle %s in bridge-interface" -#: option.c:402 +#: option.c:410 msgid "Export local names to global DNS" msgstr "" -#: option.c:403 +#: option.c:411 msgid "Domain to export to global DNS" msgstr "" -#: option.c:404 +#: option.c:412 msgid "Set TTL for authoritative replies" msgstr "" -#: option.c:405 +#: option.c:413 msgid "Set authoritive zone information" msgstr "" -#: option.c:406 +#: option.c:414 msgid "Secondary authoritative nameservers for forward domains" msgstr "" -#: option.c:407 +#: option.c:415 msgid "Peers which are allowed to do zone transfer" msgstr "" -#: option.c:408 +#: option.c:416 msgid "Specify ipsets to which matching domains should be added" msgstr "" -#: option.c:410 +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "" -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" @@ -638,294 +650,305 @@ msgstr "" "Verwendung: dnsmasq [Optionen]\n" "\n" -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "Auf der Befehlszeile nur kurze Optionen verwenden!\n" -#: option.c:600 +#: option.c:609 #, c-format msgid "Valid options are:\n" msgstr "Gültige Optionen sind:\n" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "unzulässiger Port" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "Schnittstellenbindung nicht unterstützt" -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 msgid "bad interface name" msgstr "unzulässiger Schnittestellenname" -#: option.c:720 +#: option.c:729 #, fuzzy msgid "bad address" msgstr "Fehlerhafte IP-Adresse" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "Nicht unterstützte Verkapselung für eine IPv6-Option" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "Fehlerhafte DHCP-Option" -#: option.c:929 +#: option.c:945 msgid "bad IP address" msgstr "Fehlerhafte IP-Adresse" -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 msgid "bad IPv6 address" msgstr "Fehlerhafte IPv6-Adresse" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "Fehlerhafte Domäne in DHCP-Option" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "DHCP-Option zu lang" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "Unzulässige dhcp-match-Option" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "unzulässig wiederholte Markierung" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "unzulässig wiederholtes Schlüsselwort" -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, c-format msgid "cannot access directory %s: %s" msgstr "Kann auf Verzeichnis %s nicht zugreifen: %s" -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, c-format msgid "cannot access %s: %s" msgstr "Kann auf %s nicht zugreifen: %s" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "Die Einstellung Protokolliereinrichtung kann unter Android nicht gesetzt werden" -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "Falsche Protokolliereinrichtung" -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "unzulässige MX-Präferenz-Angabe" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "unzulässiger MX-Name" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "unzulässiges MX-Ziel" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "unter uClinux ist die Skriptausführung nicht möglich" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "Neuübersetzung mit HAVE_SCRIPT nötig, um Lease-Änderungs-Skripte auszuführen" -#: option.c:1521 +#: option.c:1537 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "Um Benutzerdefinierte Lua-Scripte zu ermöglichen, muss mit HAVE_LUASCRIPT neu kompiliert werden" -#: option.c:1631 +#: option.c:1739 option.c:1800 #, fuzzy msgid "bad prefix" msgstr "unzulässiger Port" -#: option.c:2043 +#: option.c:2094 #, fuzzy msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "Um Benutzerdefinierte Lua-Scripte zu ermöglichen, muss mit HAVE_LUASCRIPT neu kompiliert werden" -#: option.c:2223 +#: option.c:2274 msgid "bad port range" msgstr "unzulässiger Portbereich" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "unzulässige Brücken-Schnittstelle" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "nur eine Marke zulässig" -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "unzulässiger DHCP-Bereich" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "inkonsistenter DHCP-Bereich" -#: option.c:2402 +#: option.c:2459 #, fuzzy -msgid "prefix must be exactly 64 for RA subnets" +msgid "prefix length must be exactly 64 for RA subnets" msgstr "Der Prefix muss mindestens 64 sein" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" -msgstr "" - -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2461 +#, fuzzy +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "Der Prefix muss mindestens 64 sein" -#: option.c:2412 +#: option.c:2465 +#, fuzzy +msgid "prefix length must be at least 64" +msgstr "Der Prefix muss mindestens 64 sein" + +#: option.c:2468 msgid "inconsistent DHCPv6 range" msgstr "Inkonsistenter DHCPv6-Bereich" -#: option.c:2519 option.c:2567 +#: option.c:2479 +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "" + +#: option.c:2590 option.c:2638 msgid "bad hex constant" msgstr "Falscher Hexwert" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "Kann die Tags in --dhcp-host nicht abgleichen" -#: option.c:2589 +#: option.c:2660 #, fuzzy, c-format msgid "duplicate dhcp-host IP address %s" msgstr "doppelte IP-Adresse %s in %s." -#: option.c:2645 +#: option.c:2716 msgid "bad DHCP host name" msgstr "unzulässiger DHCP-Hostname" -#: option.c:2727 +#: option.c:2798 msgid "bad tag-if" msgstr "unzulässige bedingte Marke (tag-if)" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "unzulässige Portnummer" -#: option.c:3113 +#: option.c:3184 msgid "bad dhcp-proxy address" msgstr "Fehlerhafte DHCP-Proxy-Adresse" -#: option.c:3124 +#: option.c:3210 +#, fuzzy +msgid "Bad dhcp-relay" +msgstr "unzulässiger DHCP-Bereich" + +#: option.c:3220 msgid "bad DUID" msgstr "" -#: option.c:3166 +#: option.c:3262 msgid "invalid alias range" msgstr "unzulässiger Alias-Bereich" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "unzulässiger CNAME" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "doppelter CNAME" -#: option.c:3230 +#: option.c:3330 msgid "bad PTR record" msgstr "unzulässiger PTR-Eintrag" -#: option.c:3261 +#: option.c:3361 msgid "bad NAPTR record" msgstr "unzulässiger NAPTR-Eintrag" -#: option.c:3295 +#: option.c:3395 #, fuzzy msgid "bad RR record" msgstr "unzulässiger PTR-Eintrag" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "unzulässiger TXT-Eintrag" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "unzulässiger SRV-Eintrag" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "unzulässiges SRV-Ziel" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "unzulässige Priorität" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "unzulässige Wichtung" -#: option.c:3417 +#: option.c:3517 #, fuzzy msgid "Bad host-record" msgstr "unzulässiger PTR-Eintrag" -#: option.c:3434 +#: option.c:3534 msgid "Bad name in host-record" msgstr "" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "unzulässige Option (prüfen Sie, ob dnsmasq mit DHCP/TFTP/DBus-Unterstützt übersetzt wurde)" -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "fehlende \\\"" -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "unzulässige Option" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "überschüssiger Parameter" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "fehler Parameter" -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "Fehler" -#: option.c:3592 +#: option.c:3692 #, fuzzy, c-format msgid " at line %d of %s" msgstr "%s in Zeile %d von %%s" -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "kann %s nicht lesen: %s" -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, c-format msgid "read %s" msgstr "%s gelesen" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "Mist in der Kommandozeile gefunden" -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Dnsmasq Version %s %s\n" -#: option.c:3951 +#: option.c:4051 #, c-format msgid "" "Compile time options: %s\n" @@ -934,63 +957,63 @@ msgstr "" "Kompilierungs-Optionen %s\n" "\n" -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Für diese Software wird ABSOLUT KEINE GARANTIE gewährt.\n" # FIXME: this must be one long string! -- MA -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "Dnsmasq ist freie Software, und du bist willkommen es weiter zu verteilen\n" -#: option.c:3954 +#: option.c:4054 #, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "unter den Bedingungen der GNU General Public Lizenz, Version 2 oder 3.\n" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "versuchen Sie --help" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "versuchen Sie -w" -#: option.c:3969 +#: option.c:4069 #, c-format msgid "bad command line options: %s" msgstr "unzulässige Optionen auf der Befehlszeile: %s" -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "kann Hostnamen nicht ermitteln: %s" -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "mit -n/--no-poll ist nur eine resolv.conf-Datei zulässig." -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "Um die Domäne zu lesen, muss genau eine resolv.conf-Datei verwendet werden." -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, c-format msgid "failed to read %s: %s" msgstr "konnte %s nicht lesen: %s" -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "keine \"search\"-Anweisung in %s gefunden" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "Es muss eine standard Domain gesetzt sein, wenn --dhcp-fqdn gesetzt ist" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "Syntaxprüfung OK" @@ -1009,103 +1032,108 @@ msgstr "Namensserver %s hat eine rekursive Anfrage verweigert" msgid "possible DNS-rebind attack detected: %s" msgstr "möglichen DNS-Rebind-Angriff entdeckt: %s" -#: network.c:414 +#: forward.c:1216 +#, fuzzy, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "Höchstzahl nebenläufiger DNS-Anfragen (%s voreingestellt)." + +#: network.c:551 #, c-format msgid "failed to create listening socket for %s: %s" msgstr "Konnte Empfangs-Socket für %s: %s nicht erzeugen" -#: network.c:743 +#: network.c:882 #, fuzzy, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "Konnte DHCPv6-Multicast-Gruppe nicht beitreten: %s" -#: network.c:937 +#: network.c:1076 #, c-format msgid "failed to bind server socket for %s: %s" msgstr "konnte nicht an Server-Socket für %s binden: %s" -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "ignoriere Namensserver %s - lokale Schnittstelle" -#: network.c:985 +#: network.c:1124 #, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "ignoriere Namensserver %s - kann Socket nicht erzeugen/binden: %s" # FIXME: this isn't translatable - always provide full strings, do not assemble yourself! -- MA -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "unqualifiziert" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "Namen" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "Standard" -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "Domain" -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "Benutze lokale Adressen nur für %s %s" -#: network.c:1011 +#: network.c:1150 #, c-format msgid "using standard nameservers for %s %s" msgstr "Benutze standard Namensserver für %s %s" -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "Benutze Namensserver %s#%d für %s %s" -#: network.c:1016 +#: network.c:1155 #, c-format msgid "using nameserver %s#%d(via %s)" msgstr "Benutze Namensserver %s#%d(via %s)" -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "Benutze Namensserver %s#%d" -#: dnsmasq.c:131 +#: dnsmasq.c:134 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "TFTP-Server nicht verfügbar, setzen Sie HAVE_TFTP in src/config.h" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "Kann nicht --conntrack UND --query-port einsetzen" -#: dnsmasq.c:139 +#: dnsmasq.c:142 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "Conntrack-Unterstützung nicht verfügbar: setze HAVE_CONNTRACK in src/config.h" -#: dnsmasq.c:144 +#: dnsmasq.c:147 msgid "asychronous logging is not available under Solaris" msgstr "asynchrone Protokollierung unter Solaris nicht verfügbar" -#: dnsmasq.c:149 +#: dnsmasq.c:152 msgid "asychronous logging is not available under Android" msgstr "Asynchrone Protokollierung unter Android nicht verfügbar" -#: dnsmasq.c:154 +#: dnsmasq.c:157 #, fuzzy msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "DBus nicht verfügbar: setzen Sie HAVE_DBUS in src/config.h" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "" @@ -1123,434 +1151,439 @@ msgstr "konnte Schnitstellenliste nicht beziehen: %s" msgid "unknown interface %s" msgstr "unbekannte Schnittstelle %s" -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "DBus-Fehler: %s" -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "DBus nicht verfügbar: setzen Sie HAVE_DBUS in src/config.h" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "Unbekannter Benutzer oder Gruppe: %s" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "kann nicht ins Wurzelverzeichnis des Dateisystems wechseln: %s" # FIXME: this and the next would need commas after the version -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, c-format msgid "started, version %s DNS disabled" msgstr "gestartet, Version %s, DNS abgeschaltet" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "gestartet, Version %s, Cachegröße %d" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "Gestartet, Version %s Cache deaktiviert" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "Übersetzungsoptionen: %s" -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "DBus-Unterstützung eingeschaltet: mit Systembus verbunden" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "DBus-Unterstützung eingeschaltet: warte auf Systembus-Verbindung" -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, c-format msgid "warning: failed to change owner of %s: %s" msgstr "Warnung: konnte den Besitzer von %s nicht ändern: %s" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "Aktiviere --bind-interfaces wegen Einschränkungen des Betriebssystems" -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "Warnung: Schnittstelle %s existiert derzeit nicht" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "Warnung: Ignoriere \"resolv-file\", weil \"no-resolv\" aktiv ist" -#: dnsmasq.c:633 +#: dnsmasq.c:634 msgid "warning: no upstream servers configured" msgstr "Warnung: keine vorgelagerten (Upstream) Server konfiguriert" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "asynchrone Protokollierung eingeschaltet, Warteschlange fasst %d Nachrichten" -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "IPv6-Router-Advertisement aktiviert" # FIXME: this and the next few must be full strings to be translatable - do not assemble in code" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "Wurzel ist" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "enabled" msgstr "Aktiviert" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "sicherer Modus" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "Begrenze gleichzeitige TFTP-Übertragungen auf maximal %d" -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "Mit System-DBus verbunden" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "kann nicht in den Hintergrund abspalten: %s" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, c-format msgid "failed to create helper: %s" msgstr "kann Helfer nicht erzeugen: %s" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, c-format msgid "setting capabilities failed: %s" msgstr "kann \"capabilities\" nicht setzen: %s" -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, c-format msgid "failed to change user-id to %s: %s" msgstr "Kann nicht Benutzerrechte %s annehmen: %s" -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, c-format msgid "failed to change group-id to %s: %s" msgstr "Kann nicht Gruppenrechte %s annehmen: %s" -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, c-format msgid "failed to open pidfile %s: %s" msgstr "kann die Prozessidentifikations-(PID)-Datei %s nicht öffnen: %s" -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, c-format msgid "cannot open log %s: %s" msgstr "Kann Logdatei %s nicht öffnen: %s" -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, c-format msgid "failed to load Lua script: %s" msgstr "Konnte Lua-Script nicht laden: %s" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, c-format msgid "script process killed by signal %d" msgstr "Scriptprozess durch Signal %d getötet" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, c-format msgid "script process exited with status %d" msgstr "Scriptprozess hat sich mit Status %d beendet" -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, c-format msgid "failed to execute %s: %s" msgstr "konnte %s nicht ausführen: %s" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "beende nach Empfang von SIGTERM" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, c-format msgid "failed to access %s: %s" msgstr "konnte auf %s nicht zugreifen: %s" -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "lese %s" -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, c-format msgid "no servers found in %s, will retry" msgstr "keine Server in %s gefunden, werde es später neu versuchen" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "kann DHCP-Socket nicht erzeugen: %s" -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "kann Optionen für DHCP-Socket nicht setzen: %s" -#: dhcp.c:77 +#: dhcp.c:89 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "kann SO_REUSE{ADDR|PORT} für DHCP-Socket nicht aktivieren: %s" -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "kann nicht an DHCP-Server-Socket binden: %s" -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "kann ICMP-Rohdaten-Socket nicht erzeugen: %s." -#: dhcp.c:225 +#: dhcp.c:239 #, c-format msgid "unknown interface %s in bridge-interface" msgstr "unbekannte Schnittstelle %s in bridge-interface" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "DHCP-Paket ohne Adresse an Schnittstelle %s empfangen" -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "DHCP-Bereich %s - %s passt nicht zur Netzmaske %s" -#: dhcp.c:832 +#: dhcp.c:806 #, c-format msgid "bad line at %s line %d" msgstr "ungültige Zeile %2$d in Datei %1$s" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "ignoriere %s Zeile %d, doppelter Name oder doppelte IP-Adresse" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + #: lease.c:61 #, c-format msgid "cannot open or create lease file %s: %s" msgstr "kann Lease-Datei %s nicht öffnen: %s" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "zu viele Leases gespeichert" -#: lease.c:164 +#: lease.c:165 #, c-format msgid "cannot run lease-init script %s: %s" msgstr "kann Lease-Start-Skript %s nicht ausführen: %s" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "Lease-Start-Skript beendete sich mit Code %s" # FIXME: This should be %u s also in English according to NIST and SI rules. -- MA -#: lease.c:339 +#: lease.c:342 #, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "Konnte %s nicht schreiben: %s (Neuversuch in %u s)" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "Ignoriere Domäne %s für DHCP-Hostnamen %s" # FIXME: this and the next few are not translatable. Please provide full # strings, do not programmatically assemble them. -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "Kein verfügbarer DHCP-Bereich für Anfrage %s %s" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "mit Subnetz-Wähler" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "via" -#: rfc2131.c:350 +#: rfc2131.c:351 #, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "%u verfügbare(s) DHCP-Subnetz: %s/%s" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, c-format msgid "%u available DHCP range: %s -- %s" msgstr "%u verfügbare(r) DHCP-Bereich: %s - %s" -# FIXME: do not programmatically assemble strings - untranslatable -#: rfc2131.c:382 -msgid "disabled" -msgstr "deaktiviert" - -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "ignoriert" - -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "Adresse in Nutzung" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "Keine Adresse verfügbar" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "Falsches Netzwerk" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "Keine Adresse konfiguriert" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "Keine Leases übrig" - -#: rfc2131.c:576 rfc3315.c:428 -#, c-format -msgid "%u client provides name: %s" -msgstr "%u Klient stellt Name bereit: %s" - -#: rfc2131.c:731 +#: rfc2131.c:465 #, c-format msgid "%u vendor class: %s" msgstr "%u \"Vendor class\": %s" -#: rfc2131.c:733 +#: rfc2131.c:467 #, c-format msgid "%u user class: %s" msgstr "%u Benutzerklasse: %s" +# FIXME: do not programmatically assemble strings - untranslatable +#: rfc2131.c:494 +msgid "disabled" +msgstr "deaktiviert" + +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "ignoriert" + +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "Adresse in Nutzung" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "Keine Adresse verfügbar" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "Falsches Netzwerk" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "Keine Adresse konfiguriert" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "Keine Leases übrig" + +#: rfc2131.c:687 rfc3315.c:466 +#, c-format +msgid "%u client provides name: %s" +msgstr "%u Klient stellt Name bereit: %s" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "PXE BIS nicht unterstützt" -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "schalte statische DHCP-Adresse %s für %s ab" # FIXME: do not assemble -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "Unbekannter Lease" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "benutze konfigurierte Adresse %s nicht, weil sie an %s verleast ist" -#: rfc2131.c:986 +#: rfc2131.c:994 #, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "benutze konfigurierte Adresse %s nicht, weil sie von Server/Relais verwendet wird" -#: rfc2131.c:989 +#: rfc2131.c:997 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "benutze konfigurierte Adresse %s nicht, weil sie zuvor abgelehnt wurde" # FIXME: do not assemble -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "Keine eindeutige ID" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "Falsche Server-ID" -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "Falsche Adresse" -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "Lease nicht gefunden" -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "Adresse nicht verfügbar" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "Statischer Lease verfügbar" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "Adresse reserviert" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "Gebe Lease von %2$s an %1$s auf" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "%u Name der Bootdatei: %s" -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, c-format msgid "%u server name: %s" msgstr "%u Servername: %s" -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, c-format msgid "%u next server: %s" msgstr "%u nächster Server: %s" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "%u Antwort per Rundsendung" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "kann DHCP/BOOTP-Opition %d nicht setzen: kein Platz mehr im Paket" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "PXE-Menüeintrag zu groß" -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, c-format msgid "%u requested options: %s" msgstr "%u angeforderte Optionen: %s" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "Kann RFC3925-Option nicht senden: zu viele Optionen für Unternehmen Nr. %d" @@ -1560,7 +1593,7 @@ msgstr "Kann RFC3925-Option nicht senden: zu viele Optionen für Unternehmen Nr. msgid "cannot create netlink socket: %s" msgstr "kann Netlink-Socket nicht erzeugen: %s" -#: netlink.c:354 +#: netlink.c:363 #, c-format msgid "netlink returns error: %s" msgstr "Netlink liefert Fehler %s" @@ -1569,53 +1602,53 @@ msgstr "Netlink liefert Fehler %s" msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "Versuch, via DBus eine IPv6-Serveradresse zu setzen: keine IPv6-Unterstützung" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "vorgelagerte Server von DBus gesetzt" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "konnte Steuerungsprogramm für DBus-Nachrichten nicht anmelden" -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "konnte DHCP-BPF-Socket nicht einrichten: %s" -#: bpf.c:225 +#: bpf.c:273 #, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "DHCP-Anfrage für nicht unterstützen Hardwaretyp (%d) auf %s empfangen" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "Die Funktion lease() fehlt im Lua-Script" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "konnte keinen freien Port für TFTP bekommen" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "nicht unterstützte Anfrage von %s" -#: tftp.c:420 +#: tftp.c:433 #, c-format msgid "file %s not found" msgstr "Datei %s nicht gefunden" -#: tftp.c:529 +#: tftp.c:542 #, c-format msgid "error %d %s received from %s" msgstr "Fehler %d %s von %s empfangen" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "failed sending %s to %s" msgstr "konnte %s nicht an %s senden" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "sent %s to %s" msgstr "%s an %s verschickt" @@ -1639,181 +1672,200 @@ msgstr "Start fehlgeschlagen" msgid "Conntrack connection mark retrieval failed: %s" msgstr "\"Conntrack connection mark\"-Abruf fehlgeschlagen: %s" -#: dhcp6.c:49 +#: dhcp6.c:59 #, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "Kann DHCPv6-Socket nicht erzeugen: %s" -#: dhcp6.c:62 +#: dhcp6.c:80 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "kann SO_REUSE{ADDR|PORT} für DHCP-Socket nicht aktivieren: %s" -#: dhcp6.c:74 +#: dhcp6.c:92 #, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "Kann nicht an DHCPv6-Server-Socket binden: %s" -#: rfc3315.c:135 +#: rfc3315.c:149 #, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "Kein Adressbereich verfügbar für die DHCPv6-Anfrage vom Relay bei %s" -#: rfc3315.c:144 +#: rfc3315.c:158 #, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "Kein Adressbereich verfügbar für die DHCPv6-Anfrage via %s" -#: rfc3315.c:269 +#: rfc3315.c:289 #, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "%u verfügbare(s) DHCPv6-Subnetz: %s/%d" -#: rfc3315.c:350 +#: rfc3315.c:370 #, fuzzy, c-format msgid "%u vendor class: %u" msgstr "%u \"Vendor class\": %s" +#: rfc3315.c:418 +#, fuzzy, c-format +msgid "%u client MAC address: %s" +msgstr "%u Klient stellt Name bereit: %s" + # FIXME: do not assemble -#: rfc3315.c:609 +#: rfc3315.c:650 #, fuzzy, c-format msgid "unknown prefix-class %d" msgstr "Unbekannter Lease" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "" -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 #, fuzzy msgid "no addresses available" msgstr "Keine Adresse verfügbar" -#: rfc3315.c:806 +#: rfc3315.c:855 #, fuzzy msgid "address unavailable" msgstr "Adresse nicht verfügbar" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "" -#: rfc3315.c:951 +#: rfc3315.c:1006 #, fuzzy msgid "address invalid" msgstr "Adresse in Nutzung" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "" -#: rfc3315.c:1003 +#: rfc3315.c:1059 #, fuzzy msgid "all addresses still on link" msgstr "Fehlerhafte Adresse in %s Zeile %d" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "Ignoriere doppelt vorhandene DHCP-Option %d" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "%u Marken: %s" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "%s hat mehr als eine Adresse in hosts-Datei, benutze %s für DHCP" -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "doppelte IP-Adresse %s (%s) in \"dhcp-config\"-Anweisung" -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, fuzzy, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "kann SO_REUSE{ADDR|PORT} für DHCP-Socket nicht aktivieren: %s" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "Bekannte DHCP-Optionen:\n" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, c-format msgid "Known DHCPv6 options:\n" msgstr "Bekannte DHCPv6-Optionen:\n" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr "" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr "" -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "" -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, fuzzy, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "DHCP, nur statische Leases auf %.0s%s, Lease-Zeit %s" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, fuzzy, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "DHCP, Proxy im Subnetz %.0s%s%.0s" -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, fuzzy, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "DHCP, IP-Bereich %s - %s, Lease-Zeit %s " -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "" -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, fuzzy, c-format msgid "router advertisement on %s%s" msgstr "Router-Advertisment nur auf %.0s%s, Lebenszeit %s" -#: radv.c:87 +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + +#: radv.c:93 #, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "Kann ICMPv6-Socket nicht erzeugen: %s" -#: auth.c:402 +#: auth.c:435 #, fuzzy, c-format msgid "ignoring zone transfer request from %s" msgstr "nicht unterstützte Anfrage von %s" -#: ipset.c:71 +#: ipset.c:95 #, fuzzy, c-format msgid "failed to find kernel version: %s" msgstr "kann nicht an DHCP-Server-Socket binden: %s" -#: ipset.c:90 +#: ipset.c:114 #, fuzzy, c-format msgid "failed to create IPset control socket: %s" msgstr "konnte TFTP-Socket nicht erzeugen: %s" diff --git a/po/es.po b/po/es.po index e31ed32..e9b82ee 100644 --- a/po/es.po +++ b/po/es.po @@ -21,17 +21,17 @@ msgstr "" msgid "failed to load names from %s: %s" msgstr "no se pudo cargar nombres desde %s: %s" -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, fuzzy, c-format msgid "bad address at %s line %d" msgstr "dirección errónea en %s línea %d" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "nombre erróneo en %s línea %d" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "direcciónes %s - %d leídas" @@ -40,37 +40,37 @@ msgstr "direcci msgid "cleared cache" msgstr "el caché fue liberado" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "%s es un CNAME, no se le está dando al arriendo DHCP de %s" -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "no otorgando nombre %s al arriendo DHCP de %s porque el nombre existe en %s con dirección %s" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "tiempo %lu" -#: cache.c:1163 +#: cache.c:1131 #, fuzzy, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "tamaño de caché %d, %d/%d inserciónes de caché reutilizaron objetos no vencidos." -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "búsquedas reenviadas %u, búsquedas respondidas localmente %u" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "servidor %s#%d: búsquedas enviadas %u, reintentadas o fallidas %u" @@ -80,568 +80,580 @@ msgstr "servidor %s#%d: b msgid "failed to seed the random number generator: %s" msgstr "no se pudo crear valor semilla para el generador de números aleatorios: %s" -#: util.c:189 +#: util.c:192 #, fuzzy msgid "failed to allocate memory" msgstr "no se pudo asignar memoria" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "no se pudo adquirir memoria" -#: util.c:237 +#: util.c:240 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "no se puede crear pipe: %s" -#: util.c:245 +#: util.c:248 #, fuzzy, c-format msgid "failed to allocate %d bytes" msgstr "no se pudo asignar %d bytes" -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "infinito" -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "Especificar dirección(es) locales dónde escuchar." -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "Retornar ipaddr (dirección IP) para todos los hosts en los dominios especificados." -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "Falsificar búsquedas reversas para rangos de dirección privados RFC1918." -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "Tratar ipaddr (dirección IP) como NXDOMAIN (derrota comodín Verisign)." -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "Especificar tamaño de caché en cuanto a cantidad de objetos (%s por predeterminado)." -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "Especificar archivo de configuración (%s por predeterminado)." -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "NO hacer un fork hacia el fondo: correr en modo debug." -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "NO reenviar búsquedas sin parte de dominio." -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "Retornar expedientes MX auto-señaladores para hosts locales." -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "Expandir nombres simples en /etc/hosts con domain-suffix (sufijo de dominio)." -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "No reenviar pedidos DNS falsos desde máquinas Windows." -#: option.c:297 +#: option.c:303 msgid "Enable DHCP in the range given with lease duration." msgstr "Habilitar DHCP dentro del rango brindado con duración del arriendo." -#: option.c:298 +#: option.c:304 #, c-format msgid "Change to this group after startup (defaults to %s)." msgstr "Cambiar a este grupo después del inicio (%s por predeterminado)." -#: option.c:299 +#: option.c:305 msgid "Set address or hostname for a specified machine." msgstr "Fijar dirección o nombre de host para una máquina especificada." -#: option.c:300 +#: option.c:306 #, fuzzy msgid "Read DHCP host specs from file." msgstr "Leer especificaciones DHCP de host desde archivo" -#: option.c:301 +#: option.c:307 #, fuzzy msgid "Read DHCP option specs from file." msgstr "Leer opciones DHCP de host desde archivo" -#: option.c:302 +#: option.c:308 msgid "Evaluate conditional tag expression." msgstr "Evaluar expresión condicional de etiqueta." -#: option.c:303 +#: option.c:309 #, c-format msgid "Do NOT load %s file." msgstr "NO cargar archivo %s." -#: option.c:304 +#: option.c:310 #, c-format msgid "Specify a hosts file to be read in addition to %s." msgstr "Especificar un archivo de hosts para ser leído adicionalmente a %s." -#: option.c:305 +#: option.c:311 msgid "Specify interface(s) to listen on." msgstr "Especificar interface(s) donde escuchar." -#: option.c:306 +#: option.c:312 msgid "Specify interface(s) NOT to listen on." msgstr "Especificar interface(s) donde NO escuchar." -#: option.c:307 +#: option.c:313 #, fuzzy msgid "Map DHCP user class to tag." msgstr "Trazar clase de usuario DHCP a etiqueta." -#: option.c:308 +#: option.c:314 msgid "Map RFC3046 circuit-id to tag." msgstr "Trazar circuit-id (identificación de circuito) RFC3046 a etiqueta." -#: option.c:309 +#: option.c:315 msgid "Map RFC3046 remote-id to tag." msgstr "Trazar remote-id (identificación remota) RFC3046 a etiqueta." -#: option.c:310 +#: option.c:316 msgid "Map RFC3993 subscriber-id to tag." msgstr "Trazar subscriber-id (identificación de suscritor) RFC3993 a etiqueta." -#: option.c:311 +#: option.c:317 #, fuzzy msgid "Don't do DHCP for hosts with tag set." msgstr "No hacer DHCP para hosts con etiqueta fijada." -#: option.c:312 +#: option.c:318 #, fuzzy msgid "Force broadcast replies for hosts with tag set." msgstr "Forzar respuestas broadcast para hosts con etiqueta fijada." -#: option.c:313 +#: option.c:319 msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "NO hacer un fork hacia el fondo, NO correr en modo debug." -#: option.c:314 +#: option.c:320 msgid "Assume we are the only DHCP server on the local network." msgstr "Asumir que somos el único servidor DHCP en la red local." -#: option.c:315 +#: option.c:321 #, c-format msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "Especificar donde almacenar arriendos DHCP (%s por predeterminado)." -#: option.c:316 +#: option.c:322 msgid "Return MX records for local hosts." msgstr "Retornar expedientes MX para hosts locales." -#: option.c:317 +#: option.c:323 msgid "Specify an MX record." msgstr "Especificar un expediente MX." -#: option.c:318 +#: option.c:324 msgid "Specify BOOTP options to DHCP server." msgstr "Especificar opciones BOOTP a servidor DHCP." -#: option.c:319 +#: option.c:325 #, c-format msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "NO revisar archivo %s periódicamente, recargar solo con SIGHUP." -#: option.c:320 +#: option.c:326 msgid "Do NOT cache failed search results." msgstr "NO almacenar en caché resultados de búsquedas fallidas." -#: option.c:321 +#: option.c:327 #, c-format msgid "Use nameservers strictly in the order given in %s." msgstr "Usar servidores DNS estrictamente en el órden brindado en %s." -#: option.c:322 +#: option.c:328 #, fuzzy msgid "Specify options to be sent to DHCP clients." msgstr "Especificar opciones para ser enviadas a clientes DHCP." -#: option.c:323 +#: option.c:329 msgid "DHCP option sent even if the client does not request it." msgstr "Opción DHCP enviada aún si el cliente no la pide." -#: option.c:324 +#: option.c:330 msgid "Specify port to listen for DNS requests on (defaults to 53)." msgstr "Especificar puerto donde escuchar por búsquedas DNS (53 por predeterminado)." -#: option.c:325 +#: option.c:331 #, c-format msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." msgstr "Tamaño máximo de paquetes UDP soportado para EDNS.0 (%s por predeterminado)." -#: option.c:326 +#: option.c:332 #, fuzzy msgid "Log DNS queries." msgstr "Bitacorear búsquedas DNS." -#: option.c:327 +#: option.c:333 #, fuzzy msgid "Force the originating port for upstream DNS queries." msgstr "Enforzar el puerto original para búsquedas DNS upstream." -#: option.c:328 +#: option.c:334 msgid "Do NOT read resolv.conf." msgstr "NO leer resolv.conf." -#: option.c:329 +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "Especificar el path hacia resolv.conf (%s por predeterminado)." -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "Especificar dirección(es) de servidores upstream con dominios opcionales." -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "Nunca reenviar búsquedas a dominios especificados." -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "Especificar el dominio para ser asignado en arriendos DHCP." -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "Especificar destino predeterminado en un expediente MX." -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "Especificar tiempo de vida en segundos para respuestas desde /etc/hosts." -#: option.c:335 +#: option.c:341 #, fuzzy msgid "Specify time-to-live in seconds for negative caching." msgstr "Especificar tiempo de vida en segundos para caché negativo." -#: option.c:336 +#: option.c:342 #, fuzzy msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "Especificar tiempo de vida en segundos para respuestas desde /etc/hosts." -#: option.c:337 +#: option.c:343 #, c-format msgid "Change to this user after startup. (defaults to %s)." msgstr "Cambiar a este usuario despues del inicio (%s por predeterminado)." -#: option.c:338 +#: option.c:344 #, fuzzy msgid "Map DHCP vendor class to tag." msgstr "Trazar clase de vendedor DHCP a etiqueta." -#: option.c:339 +#: option.c:345 msgid "Display dnsmasq version and copyright information." msgstr "Mostrar información sobre la versión y copyright de dnsmasq." -#: option.c:340 +#: option.c:346 msgid "Translate IPv4 addresses from upstream servers." msgstr "Traducir direcciones IPv4 desde servidores upstream." -#: option.c:341 +#: option.c:347 msgid "Specify a SRV record." msgstr "Especificar un expediente SRV." -#: option.c:342 +#: option.c:348 msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "Mostrar este mensaje. Usar --help dhcp para opciones DHCP conocidas." -#: option.c:343 +#: option.c:349 #, fuzzy, c-format msgid "Specify path of PID file (defaults to %s)." msgstr "Especificar path de archivo PID (%s por predeterminado)." -#: option.c:344 +#: option.c:350 #, c-format msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "Especificar número máximo de arriendos DHCP (%s por predeterminado)." -#: option.c:345 +#: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." msgstr "Responder a búsquedas DNS en base a la interface a la cuál fueron enviadas." -#: option.c:346 +#: option.c:352 msgid "Specify TXT DNS record." msgstr "Especificar expediente DNS TXT." -#: option.c:347 +#: option.c:353 #, fuzzy msgid "Specify PTR DNS record." msgstr "Especificar expediente DNS PTR." -#: option.c:348 +#: option.c:354 msgid "Give DNS name to IPv4 address of interface." msgstr "Otorgar nombre DNS a dirección IPv4 de interface." -#: option.c:349 +#: option.c:355 msgid "Bind only to interfaces in use." msgstr "Acoplar solo a interfaces en uso." -#: option.c:350 +#: option.c:356 #, c-format msgid "Read DHCP static host information from %s." msgstr "Leer información sobre hosts DHCP estáticos desde %s." -#: option.c:351 +#: option.c:357 msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "Habilitar la interface DBus para fijar servidores upstream, etc." -#: option.c:352 +#: option.c:358 msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "No proveer DHCP en esta interface, sólo proveer DNS." -#: option.c:353 +#: option.c:359 msgid "Enable dynamic address allocation for bootp." msgstr "Habilitar alocación dinámica de direcciónes para BOOTP." -#: option.c:354 +#: option.c:360 #, fuzzy msgid "Map MAC address (with wildcards) to option set." msgstr "Trazar dirección MAC (con comodínes) a opción fijada." -#: option.c:355 +#: option.c:361 msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "Tratar pedidos DHCP en alias como si llegaran de la interface." -#: option.c:356 +#: option.c:362 msgid "Disable ICMP echo address checking in the DHCP server." msgstr "Deshabilitar verificación de direcciónes para echo ICMP en el servidor DHCP." -#: option.c:357 +#: option.c:363 #, fuzzy msgid "Shell script to run on DHCP lease creation and destruction." msgstr "Archivo guión para ejecutar cuando se crea o destruye un arriendo DHCP." -#: option.c:358 +#: option.c:364 #, fuzzy msgid "Lua script to run on DHCP lease creation and destruction." msgstr "Archivo guión para ejecutar cuando se crea o destruye un arriendo DHCP." -#: option.c:359 +#: option.c:365 #, fuzzy msgid "Run lease-change scripts as this user." msgstr "Correr archivo guión de cambio de arriendos como este usuario." -#: option.c:360 +#: option.c:366 msgid "Read configuration from all the files in this directory." msgstr "Leer configuración desde todos los archivos en este directorio." -#: option.c:361 +#: option.c:367 #, fuzzy msgid "Log to this syslog facility or file. (defaults to DAEMON)" msgstr "Bitacorear a esta facilidad syslog o archivo. (DAEMON por predeterminado)" -#: option.c:362 +#: option.c:368 msgid "Do not use leasefile." msgstr "No usar archivo de arriendos." -#: option.c:363 +#: option.c:369 #, fuzzy, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "Número máximo de búsquedas DNS simultáneas. (%s por predeterminado)" -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "Liberar caché DNS al recargar %s." -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "Ignorar nombres de host brindados por clientes DHCP." -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "NO reutilizar campos de nombre de archivo y servidor para opciones DHCP extra." -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "Habilitar servidor integrado TFTP solo-lectura." -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "Exportar archivos vía TFTP solo del sub-árbol especificado." -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "Agregar IP de cliente a tftp-root." -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "Permitir acceso solo a archivos pertenecientes al usuario que corre dnsmasq." -#: option.c:371 +#: option.c:377 #, fuzzy, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "Número máximo de transferencias TFTP simultáneas (%s por predeterminado)." -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "Deshabilitar la extensión TFTP blocksize (tamaño de bloque)." -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "Rango de puertos efímeros para ser usados por transferencias TFTP." -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "Bitacoreo extra para DHCP." -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "Habilitar bitacoreo asincrónico; opcionalmente fijar tamaño de cola." -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "Detener revinculación DNS. Filtrar rangos de IP privados al resolver." -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "Permitir revinculación de 127.0.0.0/8, para servidores RBL." -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "Inhibir protección de revinculación DNS en este dominio." -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "Siempre realizar búsquedas DNS a todos los servidores." -#: option.c:381 +#: option.c:387 #, fuzzy msgid "Set tag if client includes matching option in request." msgstr "Fijar etiqueta si cliente incluye opción coincidente en pedido." -#: option.c:382 +#: option.c:388 msgid "Use alternative ports for DHCP." msgstr "Usar puertos alternativos para DHCP." -#: option.c:383 +#: option.c:389 #, fuzzy msgid "Specify NAPTR DNS record." msgstr "Especificar expediente DNS NAPTR." -#: option.c:384 +#: option.c:390 msgid "Specify lowest port available for DNS query transmission." msgstr "Especificar puerto más bajo disponible para transmisión de búsquedas DNS." -#: option.c:385 +#: option.c:391 msgid "Use only fully qualified domain names for DHCP clients." msgstr "Usar solo nombres de dominio completamente calificados para clientes DHCP." -#: option.c:386 +#: option.c:392 msgid "Generate hostnames based on MAC address for nameless clients." msgstr "Generar hostnames basados en direcciones MAC para clientes sin nombre." -#: option.c:387 +#: option.c:393 msgid "Use these DHCP relays as full proxies." msgstr "Usar estos relays DHCP como proxies completos." -#: option.c:388 +#: option.c:394 +msgid "Relay DHCP requests to a remote server" +msgstr "" + +#: option.c:395 msgid "Specify alias name for LOCAL DNS name." msgstr "Especificar nombre alias para nombre DNS LOCAL." -#: option.c:389 +#: option.c:396 #, fuzzy msgid "Prompt to send to PXE clients." msgstr "Aviso a ser enviado a clientes PXE." -#: option.c:390 +#: option.c:397 msgid "Boot service for PXE menu." msgstr "Servico boot para menú PXE." -#: option.c:391 +#: option.c:398 msgid "Check configuration syntax." msgstr "Revisar sintaxis de configuración." -#: option.c:392 +#: option.c:399 msgid "Add requestor's MAC address to forwarded DNS queries." msgstr "" -#: option.c:393 +#: option.c:400 #, fuzzy msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "Traducir direcciones IPv4 desde servidores upstream." -#: option.c:394 +#: option.c:401 msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "" -#: option.c:395 +#: option.c:402 msgid "Copy connection-track mark from queries to upstream connections." msgstr "" -#: option.c:396 +#: option.c:403 msgid "Allow DHCP clients to do their own DDNS updates." msgstr "" -#: option.c:397 +#: option.c:404 msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "" -#: option.c:398 +#: option.c:405 +msgid "Always send frequent router-advertisements" +msgstr "" + +#: option.c:406 msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "" -#: option.c:399 +#: option.c:407 #, fuzzy msgid "Specify host (A/AAAA and PTR) records" msgstr "Especificar un expediente MX." -#: option.c:400 +#: option.c:408 #, fuzzy msgid "Specify arbitrary DNS resource record" msgstr "Especificar expediente DNS TXT." -#: option.c:401 +#: option.c:409 #, fuzzy msgid "Bind to interfaces in use - check for new interfaces" msgstr "interface desconocida %s en bridge-interface" -#: option.c:402 +#: option.c:410 msgid "Export local names to global DNS" msgstr "" -#: option.c:403 +#: option.c:411 msgid "Domain to export to global DNS" msgstr "" -#: option.c:404 +#: option.c:412 msgid "Set TTL for authoritative replies" msgstr "" -#: option.c:405 +#: option.c:413 msgid "Set authoritive zone information" msgstr "" -#: option.c:406 +#: option.c:414 msgid "Secondary authoritative nameservers for forward domains" msgstr "" -#: option.c:407 +#: option.c:415 msgid "Peers which are allowed to do zone transfer" msgstr "" -#: option.c:408 +#: option.c:416 msgid "Specify ipsets to which matching domains should be added" msgstr "" -#: option.c:410 +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "" -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" @@ -650,307 +662,316 @@ msgstr "" "Modo de uso: dnsmasq [opciones]\n" "\n" -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "Usar opciones cortas solo en la línea de comandos.\n" -#: option.c:600 +#: option.c:609 #, fuzzy, c-format msgid "Valid options are:\n" msgstr "Opciones válidas son :\n" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "puerto erróneo" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "vinculación de interface no está soportado" -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 #, fuzzy msgid "bad interface name" msgstr "nombre de interface erróneo" -#: option.c:720 +#: option.c:729 #, fuzzy msgid "bad address" msgstr "dirección IP errónea" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "opción dhcp-option errónea" -#: option.c:929 +#: option.c:945 #, fuzzy msgid "bad IP address" msgstr "dirección IP errónea" -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 #, fuzzy msgid "bad IPv6 address" msgstr "dirección IP errónea" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "dominio erróneo en dhcp-option" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "opción dhcp-option demasiado larga" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "dhcp-match ilegal" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "opción repetida ilegal" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "palabra clave repetida ilegal" -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "no se puede accesar directorio %s: %s" -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "no se puede accesar %s: %s" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "" -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "" -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "preferencia MX errónea" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "nombre MX erróneo" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "destino MX erróneo" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "no se pueden correr archivos guiónes bajo uClinux" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo" -#: option.c:1521 +#: option.c:1537 #, fuzzy msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo" -#: option.c:1631 +#: option.c:1739 option.c:1800 #, fuzzy msgid "bad prefix" msgstr "puerto erróneo" -#: option.c:2043 +#: option.c:2094 #, fuzzy msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo" -#: option.c:2223 +#: option.c:2274 #, fuzzy msgid "bad port range" msgstr "rango de puertos erróneo" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "opción bridge-interface (interface puente) errónea" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "solo una etiqueta permitida" -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "opción dhcp-range (rango DHCP) errónea" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "rango DHCP inconsistente" -#: option.c:2402 -msgid "prefix must be exactly 64 for RA subnets" +#: option.c:2459 +msgid "prefix length must be exactly 64 for RA subnets" msgstr "" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" +#: option.c:2461 +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "" -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2465 +msgid "prefix length must be at least 64" msgstr "" -#: option.c:2412 +#: option.c:2468 #, fuzzy msgid "inconsistent DHCPv6 range" msgstr "rango DHCP inconsistente" -#: option.c:2519 option.c:2567 +#: option.c:2479 +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "" + +#: option.c:2590 option.c:2638 #, fuzzy msgid "bad hex constant" msgstr "opción dhcp-host errónea" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "" -#: option.c:2589 +#: option.c:2660 #, fuzzy, c-format msgid "duplicate dhcp-host IP address %s" msgstr "dirección IP duplicada %s en %s." -#: option.c:2645 +#: option.c:2716 #, fuzzy msgid "bad DHCP host name" msgstr "nombre de host DHCP erróneo" -#: option.c:2727 +#: option.c:2798 #, fuzzy msgid "bad tag-if" msgstr "destino MX erróneo" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "número de puerto inválido" -#: option.c:3113 +#: option.c:3184 #, fuzzy msgid "bad dhcp-proxy address" msgstr "dirección IP errónea" -#: option.c:3124 +#: option.c:3210 +#, fuzzy +msgid "Bad dhcp-relay" +msgstr "opción dhcp-range (rango DHCP) errónea" + +#: option.c:3220 msgid "bad DUID" msgstr "" -#: option.c:3166 +#: option.c:3262 #, fuzzy msgid "invalid alias range" msgstr "rango alias inválido" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "CNAME erróneo" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "CNAME duplicado" -#: option.c:3230 +#: option.c:3330 #, fuzzy msgid "bad PTR record" msgstr "expediente PTR erróneo" -#: option.c:3261 +#: option.c:3361 #, fuzzy msgid "bad NAPTR record" msgstr "expediente NAPTR erróneo" -#: option.c:3295 +#: option.c:3395 #, fuzzy msgid "bad RR record" msgstr "expediente PTR erróneo" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "expediente TXT erróneo" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "expediente SRV erróneo" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "destino SRV erróneo" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "prioridad inválida" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "peso inválido" -#: option.c:3417 +#: option.c:3517 #, fuzzy msgid "Bad host-record" msgstr "expediente PTR erróneo" -#: option.c:3434 +#: option.c:3534 #, fuzzy msgid "Bad name in host-record" msgstr "nombre erróneo en %s" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "opción no soportada (verificar que dnsmasq fue compilado con soporte para DHCP/TFTP/DBus)" -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "falta \"" -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "opción errónea" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "parámetro extraño" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "parámetro ausente" -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "error" -#: option.c:3592 +#: option.c:3692 #, fuzzy, c-format msgid " at line %d of %s" msgstr "%s en línea %d de %%s" -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "no se puede leer %s: %s" -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, fuzzy, c-format msgid "read %s" msgstr "leyendo %s" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "" -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Dnsmasq versión %s %s\n" -#: option.c:3951 +#: option.c:4051 #, fuzzy, c-format msgid "" "Compile time options: %s\n" @@ -959,63 +980,63 @@ msgstr "" "Opciones de compilación %s\n" "\n" -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Este software viene SIN NINGUNA GARANTIA.\n" -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "Dnsmasq es software libre, y usted está bienvenido a redistribuirlo\n" -#: option.c:3954 +#: option.c:4054 #, fuzzy, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "bajo los términos de la GNU General Public License, versión 2 o 3.\n" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "pruebe --help" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "pruebe -w" -#: option.c:3969 +#: option.c:4069 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "opciones de línea de comandos erróneas: %s" -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "no se puede obtener host-name (nombre de host): %s" -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "solo un archivo resolv.conf permitido en modo no-poll." -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "debe haber exáctamente un resolv.conf desde donde leer dominio." -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "no se pudo leer %s: %s" -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "ninguna directiva de búsqueda encontrada en %s" -#: option.c:4097 +#: option.c:4197 #, fuzzy msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "debe haber un dominio predeterminado cuando --dhcp-fqdn está fijado" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "revisión de sintaxis OK" @@ -1034,106 +1055,111 @@ msgstr "servidor DNS %s se reus msgid "possible DNS-rebind attack detected: %s" msgstr "posible ataque de revinculación DNS detectado" -#: network.c:414 +#: forward.c:1216 +#, fuzzy, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "Número máximo de búsquedas DNS simultáneas. (%s por predeterminado)" + +#: network.c:551 #, fuzzy, c-format msgid "failed to create listening socket for %s: %s" msgstr "no se pudo crear un socket escuchador: %s" -#: network.c:743 +#: network.c:882 #, fuzzy, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "no se pudo acoplar socket de servidor DHCP: %s" -#: network.c:937 +#: network.c:1076 #, fuzzy, c-format msgid "failed to bind server socket for %s: %s" msgstr "no se pudo acoplar socket escuchador para %s: %s" -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "ignorando servidor DNS %s - interface local" -#: network.c:985 +#: network.c:1124 #, fuzzy, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "ignorando servidor DNS %s - no se puede crear/acoplar socket: %s" -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "no calificado" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "nombres" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "predeterminado" -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "dominio" -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "usando direcciones locales solo para %s %s" -#: network.c:1011 +#: network.c:1150 #, fuzzy, c-format msgid "using standard nameservers for %s %s" msgstr "usando servidor DNS %s#%d para %s %s" -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "usando servidor DNS %s#%d para %s %s" -#: network.c:1016 +#: network.c:1155 #, fuzzy, c-format msgid "using nameserver %s#%d(via %s)" msgstr "usando servidor DNS %s#%d(vía %s)" -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "usando servidor DNS %s#%d" -#: dnsmasq.c:131 +#: dnsmasq.c:134 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "" -#: dnsmasq.c:139 +#: dnsmasq.c:142 #, fuzzy msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h" -#: dnsmasq.c:144 +#: dnsmasq.c:147 #, fuzzy msgid "asychronous logging is not available under Solaris" msgstr "bitacoreo asincrónico no está disponible bajo Solaris" -#: dnsmasq.c:149 +#: dnsmasq.c:152 #, fuzzy msgid "asychronous logging is not available under Android" msgstr "bitacoreo asincrónico no está disponible bajo Solaris" -#: dnsmasq.c:154 +#: dnsmasq.c:157 #, fuzzy msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "" @@ -1151,428 +1177,433 @@ msgstr "no se pudo encontrar lista de interfaces: %s" msgid "unknown interface %s" msgstr "interface desconocida %s" -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "error DBus: %s" -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "usuario o grupo desconocido: %s" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "no se puede cambiar directorio a raíz de sistema de archivos: %s" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, fuzzy, c-format msgid "started, version %s DNS disabled" msgstr "iniciado, versión %s DNS deshabilitado" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "iniciado, versión %s tamaño de caché %d" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "iniciado, versión %s caché deshabilitado" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "opciones de compilación: %s" -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "soporte DBus habilitado: conectado a bus de sistema" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "soporte DBus habilitado: conección a bus pendiente" -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, fuzzy, c-format msgid "warning: failed to change owner of %s: %s" msgstr "advertencia: no se pudo cambiar dueño de %s: %s" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "fijando opción --bind-interfaces debido a limitaciones de sistema operativo" -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "advertencia: interface %s no existe actuálmente" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "advertencia: ignorando opción resolv-file porque no-resolv está fijado" -#: dnsmasq.c:633 +#: dnsmasq.c:634 #, fuzzy msgid "warning: no upstream servers configured" msgstr "advertencia: ningún servidor upstream configurado" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "bitacoreo asincrónico habilitado, límite de cola es %d mensajes" -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "root es " -#: dnsmasq.c:669 +#: dnsmasq.c:676 #, fuzzy msgid "enabled" msgstr "habilitado" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "modo seguro" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "limitando número máximo de transferencias TFTP simultáneas a %d" -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "conectado a DBus de sistema" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "no se puede hacer fork hacia el fondo: %s" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, fuzzy, c-format msgid "failed to create helper: %s" msgstr "no se pudo crear ayudante: %s" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, fuzzy, c-format msgid "setting capabilities failed: %s" msgstr "configuración de capacidades ha fallado: %s" -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, fuzzy, c-format msgid "failed to change user-id to %s: %s" msgstr "no se pudo cambiar user-id a %s: %s" -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, fuzzy, c-format msgid "failed to change group-id to %s: %s" msgstr "no se pudo cambiar group-id a %s: %s" -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, fuzzy, c-format msgid "failed to open pidfile %s: %s" msgstr "no se pudo abrir archivo PID %s: %s" -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, fuzzy, c-format msgid "cannot open log %s: %s" msgstr "no se puede abrir %s: %s" -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, fuzzy, c-format msgid "failed to load Lua script: %s" msgstr "no se pudo cargar %s: %s" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, fuzzy, c-format msgid "script process killed by signal %d" msgstr "proceso hijo eliminado por señal %d" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, fuzzy, c-format msgid "script process exited with status %d" msgstr "proceso hijo hizo exit con estado %d" -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, fuzzy, c-format msgid "failed to execute %s: %s" msgstr "no se pudo ejecutar %s: %s" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "saliendo al recibir SIGTERM" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, fuzzy, c-format msgid "failed to access %s: %s" msgstr "no se pudo accesar %s: %s" -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "leyendo %s" -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "ningún servidor encontrado en %s, se reintentará" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "no se puede crear socket DHCP: %s" -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "no se pudo fijar opciones en socket DHCP: %s" -#: dhcp.c:77 +#: dhcp.c:89 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en socket DHCP: %s" -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "no se pudo acoplar socket de servidor DHCP: %s" -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "no se puede crear socket crudo ICMP: %s." -#: dhcp.c:225 +#: dhcp.c:239 #, fuzzy, c-format msgid "unknown interface %s in bridge-interface" msgstr "interface desconocida %s en bridge-interface" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "Paquete DHCP recibido en %s que no tiene dirección" -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "rango DHCP %s -- %s no coincide con máscara de subred %s" -#: dhcp.c:832 +#: dhcp.c:806 #, fuzzy, c-format msgid "bad line at %s line %d" msgstr "línea errónea en %s línea %d" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "ignorando %s línea %d, nombre o dirección IP duplicada" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + #: lease.c:61 #, fuzzy, c-format msgid "cannot open or create lease file %s: %s" msgstr "no se puede abrir o crear archivo de arriendos %s: %s" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "demasiados arriendos almacenados" -#: lease.c:164 +#: lease.c:165 #, fuzzy, c-format msgid "cannot run lease-init script %s: %s" msgstr "no se puede ejecutar archivo guión lease-init %s: %s" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "archivo guión lease-init retornó exit code %s" -#: lease.c:339 +#: lease.c:342 #, fuzzy, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "error al escribir %s: %s (reintentar en %us)" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "Ignorando dominio %s para nombre de host DHCP %s" -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "con selector de subred" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "vía" -#: rfc2131.c:350 +#: rfc2131.c:351 #, fuzzy, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "%u Subred DHCP disponible: %s/%s" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, fuzzy, c-format msgid "%u available DHCP range: %s -- %s" msgstr "%u Rango DHCP disponible: %s -- %s" -#: rfc2131.c:382 -msgid "disabled" -msgstr "deshabilitado" - -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "ignorado" - -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "dirección en uso" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "ninguna dirección disponible" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "red equivocada" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "ninguna dirección configurada" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "no sobra ningún arriendo" - -#: rfc2131.c:576 rfc3315.c:428 -#, fuzzy, c-format -msgid "%u client provides name: %s" -msgstr "%u cliente provee nombre: %s" - -#: rfc2131.c:731 +#: rfc2131.c:465 #, fuzzy, c-format msgid "%u vendor class: %s" msgstr "%u Clase de vendedor: %s" -#: rfc2131.c:733 +#: rfc2131.c:467 #, fuzzy, c-format msgid "%u user class: %s" msgstr "%u Clase de usuario: %s" +#: rfc2131.c:494 +msgid "disabled" +msgstr "deshabilitado" + +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "ignorado" + +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "dirección en uso" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "ninguna dirección disponible" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "red equivocada" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "ninguna dirección configurada" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "no sobra ningún arriendo" + +#: rfc2131.c:687 rfc3315.c:466 +#, fuzzy, c-format +msgid "%u client provides name: %s" +msgstr "%u cliente provee nombre: %s" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "no hay soporte para BIS PXE" -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "deshabilitando dirección DHCP estática %s para %s" -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "arriendo desconocido" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "no usando dirección configurada %s porque está arrendada a %s" -#: rfc2131.c:986 +#: rfc2131.c:994 #, fuzzy, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "no usando dirección configurada %s porque está en uso por el servidor o relay" -#: rfc2131.c:989 +#: rfc2131.c:997 #, fuzzy, c-format msgid "not using configured address %s because it was previously declined" msgstr "no usando dirección configurada %s porque fué previamente denegada" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "ningún unique-id (identificación única)" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "ID de servidor equivocada" -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "dirección equivocada" -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "arriendo no encontrado" -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "dirección no disponible" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "arriendo estático disponible" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "dirección reservada" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "abandonando arriendo a %s de %s" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "%u nombre de bootfile: %s" -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, c-format msgid "%u server name: %s" msgstr "%u nombre de servidor: %s" -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, fuzzy, c-format msgid "%u next server: %s" msgstr "%u siguiente servidor: %s" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, fuzzy, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "no se puede enviar opción DHCP/BOOTP %d: no queda espacio en paquete" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "menú PXE demasiado grande" -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, fuzzy, c-format msgid "%u requested options: %s" msgstr "%u opciones solicitadas: %s" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "no se puede enviar opción RFC3925: demasiadas opciones para número enterprise %d" @@ -1582,7 +1613,7 @@ msgstr "no se puede enviar opci msgid "cannot create netlink socket: %s" msgstr "no se puede crear socket netlink: %s" -#: netlink.c:354 +#: netlink.c:363 #, fuzzy, c-format msgid "netlink returns error: %s" msgstr "netlink retorna error: %s" @@ -1591,53 +1622,53 @@ msgstr "netlink retorna error: %s" msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "intento de fijar dirección de servidor IPv6 vía DBus - no hay soporte IPv6" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "fijando servidores upstream desde DBus" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "no se pudo registrar un manejador de mensajes DBus" -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "no se puede crear socket BPF DHCP: %s" -#: bpf.c:225 +#: bpf.c:273 #, fuzzy, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "pedido DHCP por tipo de hardware no-soportado (%d) recibido en %s" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "incapaz de conseguir puerto libre para TFTP" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "pedido no-soportado desde %s" -#: tftp.c:420 +#: tftp.c:433 #, fuzzy, c-format msgid "file %s not found" msgstr "archivo %s no encontrado" -#: tftp.c:529 +#: tftp.c:542 #, fuzzy, c-format msgid "error %d %s received from %s" msgstr "error TFTP %d %s recibido de %s" -#: tftp.c:571 +#: tftp.c:584 #, fuzzy, c-format msgid "failed sending %s to %s" msgstr "TFTP no pudo enviar %s a %s" -#: tftp.c:571 +#: tftp.c:584 #, fuzzy, c-format msgid "sent %s to %s" msgstr "TFTP envió %s a %s" @@ -1661,180 +1692,199 @@ msgstr "el inicio ha FALLADO" msgid "Conntrack connection mark retrieval failed: %s" msgstr "" -#: dhcp6.c:49 +#: dhcp6.c:59 #, fuzzy, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "no se puede crear socket DHCP: %s" -#: dhcp6.c:62 +#: dhcp6.c:80 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en socket DHCP: %s" -#: dhcp6.c:74 +#: dhcp6.c:92 #, fuzzy, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "no se pudo acoplar socket de servidor DHCP: %s" -#: rfc3315.c:135 +#: rfc3315.c:149 #, fuzzy, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s" -#: rfc3315.c:144 +#: rfc3315.c:158 #, fuzzy, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s" -#: rfc3315.c:269 +#: rfc3315.c:289 #, fuzzy, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "%u Subred DHCP disponible: %s/%s" -#: rfc3315.c:350 +#: rfc3315.c:370 #, fuzzy, c-format msgid "%u vendor class: %u" msgstr "%u Clase de vendedor: %s" -#: rfc3315.c:609 +#: rfc3315.c:418 +#, fuzzy, c-format +msgid "%u client MAC address: %s" +msgstr "%u cliente provee nombre: %s" + +#: rfc3315.c:650 #, fuzzy, c-format msgid "unknown prefix-class %d" msgstr "arriendo desconocido" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "" -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 #, fuzzy msgid "no addresses available" msgstr "ninguna dirección disponible" -#: rfc3315.c:806 +#: rfc3315.c:855 #, fuzzy msgid "address unavailable" msgstr "dirección no disponible" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "" -#: rfc3315.c:951 +#: rfc3315.c:1006 #, fuzzy msgid "address invalid" msgstr "dirección en uso" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "" -#: rfc3315.c:1003 +#: rfc3315.c:1059 #, fuzzy msgid "all addresses still on link" msgstr "dirección errónea en %s línea %d" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "%u etiquetas: %s" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "%s tiene más de una dirección en hostsfile, usando %s para DHCP" -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "dirección IP duplicada %s (%s) en directiva dhcp-config" -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, fuzzy, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en socket DHCP: %s" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "Opciones DHCP conocidas:\n" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, fuzzy, c-format msgid "Known DHCPv6 options:\n" msgstr "Opciones DHCP conocidas:\n" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr "" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr "" -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "" -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, fuzzy, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "DHCP, arriendos estáticos solo en %.0s%s, tiempo de arriendo %s" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, fuzzy, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "DHCP, proxy en subred %.0s%s%.0s" -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, fuzzy, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "DHCP, rango de IPs %s -- %s, tiempo de arriendo %s" -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "" -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, fuzzy, c-format msgid "router advertisement on %s%s" msgstr "DHCP, arriendos estáticos solo en %.0s%s, tiempo de arriendo %s" -#: radv.c:87 +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + +#: radv.c:93 #, fuzzy, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "no se puede crear socket DHCP: %s" -#: auth.c:402 +#: auth.c:435 #, fuzzy, c-format msgid "ignoring zone transfer request from %s" msgstr "pedido no-soportado desde %s" -#: ipset.c:71 +#: ipset.c:95 #, fuzzy, c-format msgid "failed to find kernel version: %s" msgstr "no se pudo acoplar socket de servidor DHCP: %s" -#: ipset.c:90 +#: ipset.c:114 #, fuzzy, c-format msgid "failed to create IPset control socket: %s" msgstr "no se pudo crear socket TFTP: %s" diff --git a/po/fi.po b/po/fi.po index 22f089c..21517ca 100644 --- a/po/fi.po +++ b/po/fi.po @@ -21,17 +21,17 @@ msgstr "" msgid "failed to load names from %s: %s" msgstr "" -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, c-format msgid "bad address at %s line %d" msgstr "" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "" @@ -40,37 +40,37 @@ msgstr "" msgid "cleared cache" msgstr "" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "" -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "" -#: cache.c:1163 +#: cache.c:1131 #, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "" -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "" @@ -80,893 +80,913 @@ msgstr "" msgid "failed to seed the random number generator: %s" msgstr "" -#: util.c:189 +#: util.c:192 msgid "failed to allocate memory" msgstr "" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "" -#: util.c:237 +#: util.c:240 #, c-format msgid "cannot create pipe: %s" msgstr "" -#: util.c:245 +#: util.c:248 #, c-format msgid "failed to allocate %d bytes" msgstr "" -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "" -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "" -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "" -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "" -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "" -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "" -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "" -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "" -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "" -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "" -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "" -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "" -#: option.c:297 -msgid "Enable DHCP in the range given with lease duration." -msgstr "" - -#: option.c:298 -#, c-format -msgid "Change to this group after startup (defaults to %s)." -msgstr "" - -#: option.c:299 -msgid "Set address or hostname for a specified machine." -msgstr "" - -#: option.c:300 -msgid "Read DHCP host specs from file." -msgstr "" - -#: option.c:301 -msgid "Read DHCP option specs from file." -msgstr "" - -#: option.c:302 -msgid "Evaluate conditional tag expression." -msgstr "" - #: option.c:303 -#, c-format -msgid "Do NOT load %s file." +msgid "Enable DHCP in the range given with lease duration." msgstr "" #: option.c:304 #, c-format -msgid "Specify a hosts file to be read in addition to %s." +msgid "Change to this group after startup (defaults to %s)." msgstr "" #: option.c:305 -msgid "Specify interface(s) to listen on." +msgid "Set address or hostname for a specified machine." msgstr "" #: option.c:306 -msgid "Specify interface(s) NOT to listen on." +msgid "Read DHCP host specs from file." msgstr "" #: option.c:307 -msgid "Map DHCP user class to tag." +msgid "Read DHCP option specs from file." msgstr "" #: option.c:308 -msgid "Map RFC3046 circuit-id to tag." +msgid "Evaluate conditional tag expression." msgstr "" #: option.c:309 -msgid "Map RFC3046 remote-id to tag." +#, c-format +msgid "Do NOT load %s file." msgstr "" #: option.c:310 -msgid "Map RFC3993 subscriber-id to tag." +#, c-format +msgid "Specify a hosts file to be read in addition to %s." msgstr "" #: option.c:311 -msgid "Don't do DHCP for hosts with tag set." +msgid "Specify interface(s) to listen on." msgstr "" #: option.c:312 -msgid "Force broadcast replies for hosts with tag set." +msgid "Specify interface(s) NOT to listen on." msgstr "" #: option.c:313 -msgid "Do NOT fork into the background, do NOT run in debug mode." +msgid "Map DHCP user class to tag." msgstr "" #: option.c:314 -msgid "Assume we are the only DHCP server on the local network." +msgid "Map RFC3046 circuit-id to tag." msgstr "" #: option.c:315 -#, c-format -msgid "Specify where to store DHCP leases (defaults to %s)." +msgid "Map RFC3046 remote-id to tag." msgstr "" #: option.c:316 -msgid "Return MX records for local hosts." +msgid "Map RFC3993 subscriber-id to tag." msgstr "" #: option.c:317 -msgid "Specify an MX record." +msgid "Don't do DHCP for hosts with tag set." msgstr "" #: option.c:318 -msgid "Specify BOOTP options to DHCP server." +msgid "Force broadcast replies for hosts with tag set." msgstr "" #: option.c:319 -#, c-format -msgid "Do NOT poll %s file, reload only on SIGHUP." +msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "" #: option.c:320 -msgid "Do NOT cache failed search results." +msgid "Assume we are the only DHCP server on the local network." msgstr "" #: option.c:321 #, c-format -msgid "Use nameservers strictly in the order given in %s." +msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "" #: option.c:322 -msgid "Specify options to be sent to DHCP clients." +msgid "Return MX records for local hosts." msgstr "" #: option.c:323 -msgid "DHCP option sent even if the client does not request it." +msgid "Specify an MX record." msgstr "" #: option.c:324 -msgid "Specify port to listen for DNS requests on (defaults to 53)." +msgid "Specify BOOTP options to DHCP server." msgstr "" #: option.c:325 #, c-format -msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." +msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "" #: option.c:326 -msgid "Log DNS queries." +msgid "Do NOT cache failed search results." msgstr "" #: option.c:327 -msgid "Force the originating port for upstream DNS queries." +#, c-format +msgid "Use nameservers strictly in the order given in %s." msgstr "" #: option.c:328 -msgid "Do NOT read resolv.conf." +msgid "Specify options to be sent to DHCP clients." msgstr "" #: option.c:329 +msgid "DHCP option sent even if the client does not request it." +msgstr "" + +#: option.c:330 +msgid "Specify port to listen for DNS requests on (defaults to 53)." +msgstr "" + +#: option.c:331 +#, c-format +msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." +msgstr "" + +#: option.c:332 +msgid "Log DNS queries." +msgstr "" + +#: option.c:333 +msgid "Force the originating port for upstream DNS queries." +msgstr "" + +#: option.c:334 +msgid "Do NOT read resolv.conf." +msgstr "" + +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "" -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "" -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "" -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "" -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "" -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "" -#: option.c:335 +#: option.c:341 msgid "Specify time-to-live in seconds for negative caching." msgstr "" -#: option.c:336 -msgid "Specify time-to-live in seconds for maximum TTL to send to clients." -msgstr "" - -#: option.c:337 -#, c-format -msgid "Change to this user after startup. (defaults to %s)." -msgstr "" - -#: option.c:338 -msgid "Map DHCP vendor class to tag." -msgstr "" - -#: option.c:339 -msgid "Display dnsmasq version and copyright information." -msgstr "" - -#: option.c:340 -msgid "Translate IPv4 addresses from upstream servers." -msgstr "" - -#: option.c:341 -msgid "Specify a SRV record." -msgstr "" - #: option.c:342 -msgid "Display this message. Use --help dhcp for known DHCP options." +msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "" #: option.c:343 #, c-format -msgid "Specify path of PID file (defaults to %s)." +msgid "Change to this user after startup. (defaults to %s)." msgstr "" #: option.c:344 -#, c-format -msgid "Specify maximum number of DHCP leases (defaults to %s)." +msgid "Map DHCP vendor class to tag." msgstr "" #: option.c:345 -msgid "Answer DNS queries based on the interface a query was sent to." +msgid "Display dnsmasq version and copyright information." msgstr "" #: option.c:346 -msgid "Specify TXT DNS record." +msgid "Translate IPv4 addresses from upstream servers." msgstr "" #: option.c:347 -msgid "Specify PTR DNS record." +msgid "Specify a SRV record." msgstr "" #: option.c:348 -msgid "Give DNS name to IPv4 address of interface." +msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "" #: option.c:349 -msgid "Bind only to interfaces in use." +#, c-format +msgid "Specify path of PID file (defaults to %s)." msgstr "" #: option.c:350 #, c-format -msgid "Read DHCP static host information from %s." +msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "" #: option.c:351 -msgid "Enable the DBus interface for setting upstream servers, etc." +msgid "Answer DNS queries based on the interface a query was sent to." msgstr "" #: option.c:352 -msgid "Do not provide DHCP on this interface, only provide DNS." +msgid "Specify TXT DNS record." msgstr "" #: option.c:353 -msgid "Enable dynamic address allocation for bootp." +msgid "Specify PTR DNS record." msgstr "" #: option.c:354 -msgid "Map MAC address (with wildcards) to option set." +msgid "Give DNS name to IPv4 address of interface." msgstr "" #: option.c:355 -msgid "Treat DHCP requests on aliases as arriving from interface." +msgid "Bind only to interfaces in use." msgstr "" #: option.c:356 -msgid "Disable ICMP echo address checking in the DHCP server." +#, c-format +msgid "Read DHCP static host information from %s." msgstr "" #: option.c:357 -msgid "Shell script to run on DHCP lease creation and destruction." +msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "" #: option.c:358 -msgid "Lua script to run on DHCP lease creation and destruction." +msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "" #: option.c:359 -msgid "Run lease-change scripts as this user." +msgid "Enable dynamic address allocation for bootp." msgstr "" #: option.c:360 -msgid "Read configuration from all the files in this directory." +msgid "Map MAC address (with wildcards) to option set." msgstr "" #: option.c:361 -msgid "Log to this syslog facility or file. (defaults to DAEMON)" +msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "" #: option.c:362 -msgid "Do not use leasefile." +msgid "Disable ICMP echo address checking in the DHCP server." msgstr "" #: option.c:363 +msgid "Shell script to run on DHCP lease creation and destruction." +msgstr "" + +#: option.c:364 +msgid "Lua script to run on DHCP lease creation and destruction." +msgstr "" + +#: option.c:365 +msgid "Run lease-change scripts as this user." +msgstr "" + +#: option.c:366 +msgid "Read configuration from all the files in this directory." +msgstr "" + +#: option.c:367 +msgid "Log to this syslog facility or file. (defaults to DAEMON)" +msgstr "" + +#: option.c:368 +msgid "Do not use leasefile." +msgstr "" + +#: option.c:369 #, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "" -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "" -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "" -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "" -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "" -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "" -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "" -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "" -#: option.c:371 +#: option.c:377 #, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "" -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "" -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "" -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "" -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "" -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "" -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "" -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "" -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "" -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "" -#: option.c:382 +#: option.c:388 msgid "Use alternative ports for DHCP." msgstr "" -#: option.c:383 +#: option.c:389 msgid "Specify NAPTR DNS record." msgstr "" -#: option.c:384 +#: option.c:390 msgid "Specify lowest port available for DNS query transmission." msgstr "" -#: option.c:385 +#: option.c:391 msgid "Use only fully qualified domain names for DHCP clients." msgstr "" -#: option.c:386 +#: option.c:392 msgid "Generate hostnames based on MAC address for nameless clients." msgstr "" -#: option.c:387 +#: option.c:393 msgid "Use these DHCP relays as full proxies." msgstr "" -#: option.c:388 -msgid "Specify alias name for LOCAL DNS name." -msgstr "" - -#: option.c:389 -msgid "Prompt to send to PXE clients." -msgstr "" - -#: option.c:390 -msgid "Boot service for PXE menu." -msgstr "" - -#: option.c:391 -msgid "Check configuration syntax." -msgstr "" - -#: option.c:392 -msgid "Add requestor's MAC address to forwarded DNS queries." -msgstr "" - -#: option.c:393 -msgid "Proxy DNSSEC validation results from upstream nameservers." -msgstr "" - #: option.c:394 -msgid "Attempt to allocate sequential IP addresses to DHCP clients." +msgid "Relay DHCP requests to a remote server" msgstr "" #: option.c:395 -msgid "Copy connection-track mark from queries to upstream connections." +msgid "Specify alias name for LOCAL DNS name." msgstr "" #: option.c:396 -msgid "Allow DHCP clients to do their own DDNS updates." +msgid "Prompt to send to PXE clients." msgstr "" #: option.c:397 -msgid "Send router-advertisements for interfaces doing DHCPv6" +msgid "Boot service for PXE menu." msgstr "" #: option.c:398 -msgid "Specify DUID_EN-type DHCPv6 server DUID" +msgid "Check configuration syntax." msgstr "" #: option.c:399 -msgid "Specify host (A/AAAA and PTR) records" +msgid "Add requestor's MAC address to forwarded DNS queries." msgstr "" #: option.c:400 -msgid "Specify arbitrary DNS resource record" +msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "" #: option.c:401 -msgid "Bind to interfaces in use - check for new interfaces" +msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "" #: option.c:402 -msgid "Export local names to global DNS" +msgid "Copy connection-track mark from queries to upstream connections." msgstr "" #: option.c:403 -msgid "Domain to export to global DNS" +msgid "Allow DHCP clients to do their own DDNS updates." msgstr "" #: option.c:404 -msgid "Set TTL for authoritative replies" +msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "" #: option.c:405 -msgid "Set authoritive zone information" +msgid "Always send frequent router-advertisements" msgstr "" #: option.c:406 -msgid "Secondary authoritative nameservers for forward domains" +msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "" #: option.c:407 -msgid "Peers which are allowed to do zone transfer" +msgid "Specify host (A/AAAA and PTR) records" msgstr "" #: option.c:408 -msgid "Specify ipsets to which matching domains should be added" +msgid "Specify arbitrary DNS resource record" +msgstr "" + +#: option.c:409 +msgid "Bind to interfaces in use - check for new interfaces" msgstr "" #: option.c:410 +msgid "Export local names to global DNS" +msgstr "" + +#: option.c:411 +msgid "Domain to export to global DNS" +msgstr "" + +#: option.c:412 +msgid "Set TTL for authoritative replies" +msgstr "" + +#: option.c:413 +msgid "Set authoritive zone information" +msgstr "" + +#: option.c:414 +msgid "Secondary authoritative nameservers for forward domains" +msgstr "" + +#: option.c:415 +msgid "Peers which are allowed to do zone transfer" +msgstr "" + +#: option.c:416 +msgid "Specify ipsets to which matching domains should be added" +msgstr "" + +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "" -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" "\n" msgstr "" -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "" -#: option.c:600 +#: option.c:609 #, c-format msgid "Valid options are:\n" msgstr "" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "" -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 msgid "bad interface name" msgstr "" -#: option.c:720 +#: option.c:729 msgid "bad address" msgstr "" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "" -#: option.c:929 +#: option.c:945 msgid "bad IP address" msgstr "" -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 msgid "bad IPv6 address" msgstr "" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "" -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, c-format msgid "cannot access directory %s: %s" msgstr "" -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, c-format msgid "cannot access %s: %s" msgstr "" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "" -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "" -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "" -#: option.c:1521 +#: option.c:1537 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "" -#: option.c:1631 +#: option.c:1739 option.c:1800 msgid "bad prefix" msgstr "" -#: option.c:2043 +#: option.c:2094 msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "" -#: option.c:2223 +#: option.c:2274 msgid "bad port range" msgstr "" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "" -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "" -#: option.c:2402 -msgid "prefix must be exactly 64 for RA subnets" +#: option.c:2459 +msgid "prefix length must be exactly 64 for RA subnets" msgstr "" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" +#: option.c:2461 +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "" -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2465 +msgid "prefix length must be at least 64" msgstr "" -#: option.c:2412 +#: option.c:2468 msgid "inconsistent DHCPv6 range" msgstr "" -#: option.c:2519 option.c:2567 +#: option.c:2479 +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "" + +#: option.c:2590 option.c:2638 msgid "bad hex constant" msgstr "" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "" -#: option.c:2589 +#: option.c:2660 #, c-format msgid "duplicate dhcp-host IP address %s" msgstr "" -#: option.c:2645 +#: option.c:2716 msgid "bad DHCP host name" msgstr "" -#: option.c:2727 +#: option.c:2798 msgid "bad tag-if" msgstr "" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "" -#: option.c:3113 +#: option.c:3184 msgid "bad dhcp-proxy address" msgstr "" -#: option.c:3124 +#: option.c:3210 +msgid "Bad dhcp-relay" +msgstr "" + +#: option.c:3220 msgid "bad DUID" msgstr "" -#: option.c:3166 +#: option.c:3262 msgid "invalid alias range" msgstr "" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "" -#: option.c:3230 +#: option.c:3330 msgid "bad PTR record" msgstr "" -#: option.c:3261 +#: option.c:3361 msgid "bad NAPTR record" msgstr "" -#: option.c:3295 +#: option.c:3395 msgid "bad RR record" msgstr "" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "" -#: option.c:3417 +#: option.c:3517 msgid "Bad host-record" msgstr "" -#: option.c:3434 +#: option.c:3534 msgid "Bad name in host-record" msgstr "" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "" -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "" -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "" -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "" -#: option.c:3592 +#: option.c:3692 #, c-format msgid " at line %d of %s" msgstr "" -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "" -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, c-format msgid "read %s" msgstr "" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "" -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "" -#: option.c:3951 +#: option.c:4051 #, c-format msgid "" "Compile time options: %s\n" "\n" msgstr "" -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "" -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "" -#: option.c:3954 +#: option.c:4054 #, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "" -#: option.c:3969 +#: option.c:4069 #, c-format msgid "bad command line options: %s" msgstr "" -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "" -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "" -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "" -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, c-format msgid "failed to read %s: %s" msgstr "" -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "" @@ -985,101 +1005,106 @@ msgstr "" msgid "possible DNS-rebind attack detected: %s" msgstr "" -#: network.c:414 +#: forward.c:1216 +#, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "" + +#: network.c:551 #, c-format msgid "failed to create listening socket for %s: %s" msgstr "" -#: network.c:743 +#: network.c:882 #, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "" -#: network.c:937 +#: network.c:1076 #, c-format msgid "failed to bind server socket for %s: %s" msgstr "" -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "" -#: network.c:985 +#: network.c:1124 #, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "" -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "" -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "" -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "" -#: network.c:1011 +#: network.c:1150 #, c-format msgid "using standard nameservers for %s %s" msgstr "" -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "" -#: network.c:1016 +#: network.c:1155 #, c-format msgid "using nameserver %s#%d(via %s)" msgstr "" -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "" -#: dnsmasq.c:131 +#: dnsmasq.c:134 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "" -#: dnsmasq.c:139 +#: dnsmasq.c:142 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "" -#: dnsmasq.c:144 +#: dnsmasq.c:147 msgid "asychronous logging is not available under Solaris" msgstr "" -#: dnsmasq.c:149 +#: dnsmasq.c:152 msgid "asychronous logging is not available under Android" msgstr "" -#: dnsmasq.c:154 +#: dnsmasq.c:157 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "" @@ -1097,426 +1122,431 @@ msgstr "" msgid "unknown interface %s" msgstr "" -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "" -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, c-format msgid "started, version %s DNS disabled" msgstr "" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "" -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "" -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, c-format msgid "warning: failed to change owner of %s: %s" msgstr "" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "" -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:633 +#: dnsmasq.c:634 msgid "warning: no upstream servers configured" msgstr "" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "" -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "enabled" msgstr "" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, c-format msgid "failed to create helper: %s" msgstr "" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, c-format msgid "setting capabilities failed: %s" msgstr "" -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, c-format msgid "failed to change user-id to %s: %s" msgstr "" -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, c-format msgid "failed to change group-id to %s: %s" msgstr "" -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, c-format msgid "failed to open pidfile %s: %s" msgstr "" -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, c-format msgid "cannot open log %s: %s" msgstr "" -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, c-format msgid "failed to load Lua script: %s" msgstr "" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, c-format msgid "script process killed by signal %d" msgstr "" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, c-format msgid "script process exited with status %d" msgstr "" -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, c-format msgid "failed to execute %s: %s" msgstr "" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, c-format msgid "failed to access %s: %s" msgstr "" -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "" -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, c-format msgid "no servers found in %s, will retry" msgstr "" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "" -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "" -#: dhcp.c:77 +#: dhcp.c:89 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "" -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "" -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "" -#: dhcp.c:225 +#: dhcp.c:239 #, c-format msgid "unknown interface %s in bridge-interface" msgstr "" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "" -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "" -#: dhcp.c:832 +#: dhcp.c:806 #, c-format msgid "bad line at %s line %d" msgstr "" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + #: lease.c:61 #, c-format msgid "cannot open or create lease file %s: %s" msgstr "" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "" -#: lease.c:164 +#: lease.c:165 #, c-format msgid "cannot run lease-init script %s: %s" msgstr "" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "" -#: lease.c:339 +#: lease.c:342 #, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "" -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "" -#: rfc2131.c:350 +#: rfc2131.c:351 #, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, c-format msgid "%u available DHCP range: %s -- %s" msgstr "" -#: rfc2131.c:382 -msgid "disabled" -msgstr "" - -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "" - -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "" - -#: rfc2131.c:576 rfc3315.c:428 -#, c-format -msgid "%u client provides name: %s" -msgstr "" - -#: rfc2131.c:731 +#: rfc2131.c:465 #, c-format msgid "%u vendor class: %s" msgstr "" -#: rfc2131.c:733 +#: rfc2131.c:467 #, c-format msgid "%u user class: %s" msgstr "" +#: rfc2131.c:494 +msgid "disabled" +msgstr "" + +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "" + +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "" + +#: rfc2131.c:687 rfc3315.c:466 +#, c-format +msgid "%u client provides name: %s" +msgstr "" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "" -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "" -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:986 +#: rfc2131.c:994 #, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:989 +#: rfc2131.c:997 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "" -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "" -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "" -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "" -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, c-format msgid "%u server name: %s" msgstr "" -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, c-format msgid "%u next server: %s" msgstr "" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "" -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, c-format msgid "%u requested options: %s" msgstr "" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "" @@ -1526,7 +1556,7 @@ msgstr "" msgid "cannot create netlink socket: %s" msgstr "" -#: netlink.c:354 +#: netlink.c:363 #, c-format msgid "netlink returns error: %s" msgstr "" @@ -1535,53 +1565,53 @@ msgstr "" msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "" -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "" -#: bpf.c:225 +#: bpf.c:273 #, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "" -#: tftp.c:420 +#: tftp.c:433 #, c-format msgid "file %s not found" msgstr "" -#: tftp.c:529 +#: tftp.c:542 #, c-format msgid "error %d %s received from %s" msgstr "" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "failed sending %s to %s" msgstr "" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "sent %s to %s" msgstr "" @@ -1605,176 +1635,195 @@ msgstr "" msgid "Conntrack connection mark retrieval failed: %s" msgstr "" -#: dhcp6.c:49 +#: dhcp6.c:59 #, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "" -#: dhcp6.c:62 +#: dhcp6.c:80 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "" -#: dhcp6.c:74 +#: dhcp6.c:92 #, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "" -#: rfc3315.c:135 +#: rfc3315.c:149 #, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "" -#: rfc3315.c:144 +#: rfc3315.c:158 #, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "" -#: rfc3315.c:269 +#: rfc3315.c:289 #, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "" -#: rfc3315.c:350 +#: rfc3315.c:370 #, c-format msgid "%u vendor class: %u" msgstr "" -#: rfc3315.c:609 +#: rfc3315.c:418 +#, c-format +msgid "%u client MAC address: %s" +msgstr "" + +#: rfc3315.c:650 #, c-format msgid "unknown prefix-class %d" msgstr "" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "" -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 msgid "no addresses available" msgstr "" -#: rfc3315.c:806 +#: rfc3315.c:855 msgid "address unavailable" msgstr "" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "" -#: rfc3315.c:951 +#: rfc3315.c:1006 msgid "address invalid" msgstr "" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "" -#: rfc3315.c:1003 +#: rfc3315.c:1059 msgid "all addresses still on link" msgstr "" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "" -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "" -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, c-format msgid "Known DHCPv6 options:\n" msgstr "" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr "" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr "" -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "" -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "" -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "" -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "" -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, c-format msgid "router advertisement on %s%s" msgstr "" -#: radv.c:87 +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + +#: radv.c:93 #, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "" -#: auth.c:402 +#: auth.c:435 #, c-format msgid "ignoring zone transfer request from %s" msgstr "" -#: ipset.c:71 +#: ipset.c:95 #, c-format msgid "failed to find kernel version: %s" msgstr "" -#: ipset.c:90 +#: ipset.c:114 #, c-format msgid "failed to create IPset control socket: %s" msgstr "" diff --git a/po/fr.po b/po/fr.po index b5c8590..16b191a 100644 --- a/po/fr.po +++ b/po/fr.po @@ -19,17 +19,17 @@ msgstr "" msgid "failed to load names from %s: %s" msgstr "Impossible de charger les noms à partir de %s : %s" -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, c-format msgid "bad address at %s line %d" msgstr "mauvaise adresse dans %s ligne %d" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "mauvais nom dans %s ligne %d" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "lecture %s - %d adresses" @@ -38,37 +38,37 @@ msgstr "lecture %s - %d adresses" msgid "cleared cache" msgstr "cache vidé" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "Aucune adresse IPv4 trouvée pour %s" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "%s est un CNAME, il ne sera pas donné au bail DHCP de %s" -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "ne donne pas de nom %s au bail DHCP de %s parce-que le nom existe dans %s avec l'adresse %s" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "horodatage %lu" -#: cache.c:1163 +#: cache.c:1131 #, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "taille de cache %d, %d/%d insertions dans le cache entrées non-expirées réutilisées" -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "requêtes transmises %u, requêtes résolues localement %u" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "serveur %s#%d: requêtes envoyées %u, requêtes réessayées ou échouées %u" @@ -78,557 +78,569 @@ msgstr "serveur %s#%d: requ msgid "failed to seed the random number generator: %s" msgstr "impossible d'initialiser le générateur de nombre aléatoire : %s" -#: util.c:189 +#: util.c:192 msgid "failed to allocate memory" msgstr "impossible d'allouer la mémoire" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "impossible d'allouer de la mémoire" -#: util.c:237 +#: util.c:240 #, c-format msgid "cannot create pipe: %s" msgstr "Ne peut pas créer le tube %s : %s" -#: util.c:245 +#: util.c:248 #, c-format msgid "failed to allocate %d bytes" msgstr "impossible d'allouer %d octets" -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "illimité(e)" -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "Spécifie la ou les adresse(s) locales où le démon doit se mettre à l'écoute." -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "Retourne les adresses IP pour toutes les machines présentes dans les domaines spécifiés" -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "Traduction inverse truquée pour la plage d'adresse privée RFC1918" -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "Traite l'adresse IP comme un domaine inexistant NXDOMAIN (contourne le systeme de redirection de Verisign)" -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "Spécifie le nombre d'entrées que contiendra le cache (par défaut : %s)." -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "Spécifie le nom du fichier de configuration (par défaut : %s)" -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "Ne passe pas en tâche de fond : démarre en mode debug" -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "Ne retransmet pas les requêtes qui n'ont pas de domaine." -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "Retourne les champs MX pour les machines locales." -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "Etend les noms uniques des machines dans /etc/hosts avec le suffixe du domaine." -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "Ne retransmet pas les fausses requêtes DNS en provenance des machines Windows." -#: option.c:297 +#: option.c:303 msgid "Enable DHCP in the range given with lease duration." msgstr "Autorise DHCP dans la plage d'adresses donnée sur la durée de validité du bail." -#: option.c:298 +#: option.c:304 #, c-format msgid "Change to this group after startup (defaults to %s)." msgstr "On change pour ce groupe après le démarrage (par défaut : %s)." -#: option.c:299 +#: option.c:305 msgid "Set address or hostname for a specified machine." msgstr "On assigne une adresse ou un nom pour une machine spécifiée." -#: option.c:300 +#: option.c:306 msgid "Read DHCP host specs from file." msgstr "Lecture des spécifications d'hôtes DHCP à partir du fichier" -#: option.c:301 +#: option.c:307 msgid "Read DHCP option specs from file." msgstr "Lecture des options DHCP à partir du fichier" -#: option.c:302 +#: option.c:308 msgid "Evaluate conditional tag expression." msgstr "Expression d'évaluation conditionnelle d'étiquette" -#: option.c:303 +#: option.c:309 #, c-format msgid "Do NOT load %s file." msgstr "Ne charge PAS le fichier %s." -#: option.c:304 +#: option.c:310 #, c-format msgid "Specify a hosts file to be read in addition to %s." msgstr "Spécifie un nom de fichier hosts à lire en complément de %s" -#: option.c:305 +#: option.c:311 msgid "Specify interface(s) to listen on." msgstr "Spécifie la ou les interface(s) où le démon doit se mettre à l'écoute." -#: option.c:306 +#: option.c:312 msgid "Specify interface(s) NOT to listen on." msgstr "Spécifie la ou les interface(s) que le démon ne doit PAS traiter." # -#: option.c:307 +#: option.c:313 msgid "Map DHCP user class to tag." msgstr "Associe les classes d'utilisateurs ('user class') DHCP aux options." -#: option.c:308 +#: option.c:314 msgid "Map RFC3046 circuit-id to tag." msgstr "Associe les identifiants de circuits RFC3046 ('circuit-id') aux options" -#: option.c:309 +#: option.c:315 msgid "Map RFC3046 remote-id to tag." msgstr "Associe les identifiants distants RFC3046 ('remote-id') aux options" -#: option.c:310 +#: option.c:316 msgid "Map RFC3993 subscriber-id to tag." msgstr "Associe les identifiants de souscripteurs RFC3993 ('subscriber-id') aux options" # -#: option.c:311 +#: option.c:317 msgid "Don't do DHCP for hosts with tag set." msgstr "Ne pas autoriser DHCP pour les machines énumerées dans les options." # -#: option.c:312 +#: option.c:318 msgid "Force broadcast replies for hosts with tag set." msgstr "Forcer les réponses par 'broadcast' pour les machines énumerées dans les options." -#: option.c:313 +#: option.c:319 msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "Ne passe pas en tâche de fond, ne pas s'exécuter en mode debug." -#: option.c:314 +#: option.c:320 msgid "Assume we are the only DHCP server on the local network." msgstr "On considère que l'on est le seul serveur DHCP sur le réseau local." -#: option.c:315 +#: option.c:321 #, c-format msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "Spécifie où il faut sauvegarder les baux DHCP (par défaut : %s)." -#: option.c:316 +#: option.c:322 msgid "Return MX records for local hosts." msgstr "Retourne les champs MX pour les machines locales." -#: option.c:317 +#: option.c:323 msgid "Specify an MX record." msgstr "Spécifie un champ MX." -#: option.c:318 +#: option.c:324 msgid "Specify BOOTP options to DHCP server." msgstr "Spécifie les options BOOTP pour le serveur DHCP." -#: option.c:319 +#: option.c:325 #, c-format msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "Ne pas scruter le fichier %s, ne recharger les modifications que sur réception du signal SIGHUP." -#: option.c:320 +#: option.c:326 msgid "Do NOT cache failed search results." msgstr "Ne place pas en cache le résultat des requêtes qui ont échouées." -#: option.c:321 +#: option.c:327 #, c-format msgid "Use nameservers strictly in the order given in %s." msgstr "Utilise les serveurs de noms dans l'ordre donné dans %s." # -#: option.c:322 +#: option.c:328 msgid "Specify options to be sent to DHCP clients." msgstr "Options supplémentaires à associer aux clients DHCP." -#: option.c:323 +#: option.c:329 msgid "DHCP option sent even if the client does not request it." msgstr "Option DHCP envoyée même si le client de la demande pas." -#: option.c:324 +#: option.c:330 msgid "Specify port to listen for DNS requests on (defaults to 53)." msgstr "Spécifie le port où il faut écouter les requêtes DNS (par défaut : 53)." -#: option.c:325 +#: option.c:331 #, c-format msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." msgstr "Taille maximale des paquets UDP supportés pour EDNS.0 (par défaut : %s)." # -#: option.c:326 +#: option.c:332 msgid "Log DNS queries." msgstr "Enregistre les requêtes DNS dans un journal d'activité." # -#: option.c:327 +#: option.c:333 msgid "Force the originating port for upstream DNS queries." msgstr "Force le port d'origine pour les requêtes vers les serveurs amonts." -#: option.c:328 +#: option.c:334 msgid "Do NOT read resolv.conf." msgstr "Ne pas lire le fichier resolv.conf." -#: option.c:329 +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "Spécifie le chemin pour le fichier resolv.conf (par défaut : %s)." -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "Spécifie la ou les adresses des serveurs amonts avec des domaines optionels." -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "Ne jamais retransmettre les requêtes pour les domaines spécifiés." -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "Spécifie le domaine qui doit etre assigné aux baux DHCP." -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "Spécifie la cible par défaut dans un champ MX." -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts." # -#: option.c:335 +#: option.c:341 msgid "Specify time-to-live in seconds for negative caching." msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts." -#: option.c:336 +#: option.c:342 msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "Spécifie, en secondes, la valeur maximum de TTL à renvoyer aux clients." -#: option.c:337 +#: option.c:343 #, c-format msgid "Change to this user after startup. (defaults to %s)." msgstr "Change pour cet utilisateur après le démarrage (par défaut : %s)." # -#: option.c:338 +#: option.c:344 msgid "Map DHCP vendor class to tag." msgstr "Associe les classes de fournisseurs ('vendor class') DHCP aux options." -#: option.c:339 +#: option.c:345 msgid "Display dnsmasq version and copyright information." msgstr "Affiche la version de Dnsmasq et les informations liées au copyright." -#: option.c:340 +#: option.c:346 msgid "Translate IPv4 addresses from upstream servers." msgstr "Traduit les adresses IPV4 des serveurs amonts." -#: option.c:341 +#: option.c:347 msgid "Specify a SRV record." msgstr "Spécifie un champ SRV." -#: option.c:342 +#: option.c:348 msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "Afficher ce message. Utiliser --help dhcp pour obtenir la liste des options DHCP connues." -#: option.c:343 +#: option.c:349 #, c-format msgid "Specify path of PID file (defaults to %s)." msgstr "Spécifie un chemin pour le fichier PID (par défaut : %s)." -#: option.c:344 +#: option.c:350 #, c-format msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "Spécifie le nombre maximum de baux DHCP (par défaut : %s)." -#: option.c:345 +#: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." msgstr "Repond aux requêtes DNS en se basant sur l'interface ou a été envoyée la requête." -#: option.c:346 +#: option.c:352 msgid "Specify TXT DNS record." msgstr "Spécifie un champ DNS TXT" # -#: option.c:347 +#: option.c:353 msgid "Specify PTR DNS record." msgstr "Spécifie un champ DNS PTR" -#: option.c:348 +#: option.c:354 msgid "Give DNS name to IPv4 address of interface." msgstr "Donne le nom DNS pour l'adresse IPv4 de l'interface." -#: option.c:349 +#: option.c:355 msgid "Bind only to interfaces in use." msgstr "Association uniquement aux interfaces réseau actuellement actives." -#: option.c:350 +#: option.c:356 #, c-format msgid "Read DHCP static host information from %s." msgstr "Lecture des informations de DHCP statique à partir de %s." -#: option.c:351 +#: option.c:357 msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "Autorise l'interface DBus pour la configuration des serveurs amonts, etc." -#: option.c:352 +#: option.c:358 msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "Ne pas assurer de fonction DHCP sur cette interface, mais seulement la fonction DNS." -#: option.c:353 +#: option.c:359 msgid "Enable dynamic address allocation for bootp." msgstr "Autorise l'allocation dynamique d'adresse pour bootp." # -#: option.c:354 +#: option.c:360 msgid "Map MAC address (with wildcards) to option set." msgstr "Associe l'adresse MAC (avec les jokers) aux options." -#: option.c:355 +#: option.c:361 msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "Traiter les requêtes DHCP sur les alias comme arrivant de l'interface." -#: option.c:356 +#: option.c:362 msgid "Disable ICMP echo address checking in the DHCP server." msgstr "Supprime la vérification d'adresse sur le serveur au moyen de paquets ICMP echo" -#: option.c:357 +#: option.c:363 msgid "Shell script to run on DHCP lease creation and destruction." msgstr "Script shell à exécuter lors de la création ou destruction de bail DHCP." -#: option.c:358 +#: option.c:364 msgid "Lua script to run on DHCP lease creation and destruction." msgstr "Script Lua à exécuter lors de la création ou destruction de bail DHCP." -#: option.c:359 +#: option.c:365 msgid "Run lease-change scripts as this user." msgstr "Lancer le script 'lease-change' avec cet utilisateur." -#: option.c:360 +#: option.c:366 msgid "Read configuration from all the files in this directory." msgstr "Lecture de la configuration dans tous les fichiers de ce répertoire." # -#: option.c:361 +#: option.c:367 msgid "Log to this syslog facility or file. (defaults to DAEMON)" msgstr "Enregistrer les journaux d'activité dans cette facilité syslog. (défaut : DAEMON)" -#: option.c:362 +#: option.c:368 msgid "Do not use leasefile." msgstr "Ne pas utiliser de fichier de baux." -#: option.c:363 +#: option.c:369 #, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "Spécifie le nombre maximum de requêtes DHCP concurrentes (par défaut : %s)." -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "Vider le cache DNS lors du rechargement de %s." -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "Ignorer les noms d'hôtes fournis par les clients DHCP" -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "Ne pas réutiliser les champs nom de fichier et serveur dans les options DHCP supplémentaires." -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "Activer le server TFTP intégré (fonctionnant en lecture seulement)" -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "N'exporter par TFTP que les fichiers de l'arborescence de fichier spécifiée" -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "Ajouter les adresses IP clientes à la racine tftp ('tftp-root')." -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "Accès aux seuls fichiers appartenants à l'utilisateur sous lequel tourne dnsmasq" -#: option.c:371 +#: option.c:377 #, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "Spécifie le nombre maximum de transfert TFTP concurrents (défaut : %s)." -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "Désactivation de l'extension TFTP « taille de bloc »" -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "Convertis les noms de fichiers TFTP en minuscule" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "Gamme de ports dans laquelle seront choisis les ports temporaires utilisés dans les transferts TFTP." -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "Traces supplémentaires pour le DHCP." -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "Active l'écriture de traces en mode asynchrone. Peut prendre en option la valeur de la longueur de la queue." -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "Stopper la réassociation DNS ('DNS rebinding'). Filtre les gammes d'adresses IP privées lors de la résolution." -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "Autorise la réassociation de 127.0.0/8, pour les serveurs RBL (Realtime Blackhole List)" -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "Désactive la protection contre les réassociation DNS pour ce domaine" -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "Toujours effectuer les requêtes DNS à tous les serveurs." # -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "Spécifie le label si le client inclus l'option dans la requête." -#: option.c:382 +#: option.c:388 msgid "Use alternative ports for DHCP." msgstr "Utiliser des ports alternatifs pour le DHCP." # -#: option.c:383 +#: option.c:389 msgid "Specify NAPTR DNS record." msgstr "Spécifie un champ DNS NAPTR." -#: option.c:384 +#: option.c:390 msgid "Specify lowest port available for DNS query transmission." msgstr "Définie le plus petit port utilisé pour la transmission d'une requête DNS." -#: option.c:385 +#: option.c:391 msgid "Use only fully qualified domain names for DHCP clients." msgstr "Utilise seulement les noms de domaine pleinement qualifiés pour les clients DHCP." -#: option.c:386 +#: option.c:392 msgid "Generate hostnames based on MAC address for nameless clients." msgstr "Génère les noms d'hôtes à partir de l'adresse MAC pour les clients sans nom." -#: option.c:387 +#: option.c:393 msgid "Use these DHCP relays as full proxies." msgstr "Utilise ces relais DHCP en temps que proxy complets." -#: option.c:388 +#: option.c:394 +msgid "Relay DHCP requests to a remote server" +msgstr "" + +#: option.c:395 msgid "Specify alias name for LOCAL DNS name." msgstr "Spécifie un alias pour un nom DNS local." # -#: option.c:389 +#: option.c:396 msgid "Prompt to send to PXE clients." msgstr "Invite à envoyer aux clients PXE." -#: option.c:390 +#: option.c:397 msgid "Boot service for PXE menu." msgstr "Service de démarrage pour menu PXE." -#: option.c:391 +#: option.c:398 msgid "Check configuration syntax." msgstr "vérification de la syntaxe de la configuration." -#: option.c:392 +#: option.c:399 msgid "Add requestor's MAC address to forwarded DNS queries." msgstr "Ajoute l'adresse MAC du requêteur aux requêtes DNS transmises" -#: option.c:393 +#: option.c:400 msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "Copie dans la réponse DNS le résultat de la validation DNSSEC effectuée par les serveurs DNS amonts." -#: option.c:394 +#: option.c:401 msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "Essaie d'allouer des adresses IP séquentielles aux clients DHCP." -#: option.c:395 +#: option.c:402 msgid "Copy connection-track mark from queries to upstream connections." msgstr "Copie les marques de suivi de connexion pour les requêtes amont." -#: option.c:396 +#: option.c:403 msgid "Allow DHCP clients to do their own DDNS updates." msgstr "Autoriser les clients DHCP à faire leurs propres mises à jour DDNS (Dynamic DNS)" -#: option.c:397 +#: option.c:404 msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "envoyer des annonces de routeurs pour toutes les interfaces faisant du DHCPv6" -#: option.c:398 +#: option.c:405 +msgid "Always send frequent router-advertisements" +msgstr "" + +#: option.c:406 msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "Spécifie pour le serveur DHCPv6 un identifiant unique DHCP (DUID) basé sur un numéro unique de vendeur (DUID_EN)" -#: option.c:399 +#: option.c:407 msgid "Specify host (A/AAAA and PTR) records" msgstr "Spécifie les enregistrements (A/AAAA et PTR) d'un hôte." -#: option.c:400 +#: option.c:408 msgid "Specify arbitrary DNS resource record" msgstr "Définie une resource DNS d'un type spécifique" -#: option.c:401 +#: option.c:409 msgid "Bind to interfaces in use - check for new interfaces" msgstr "Se lie aux interfaces préexistantes - vérifie l'apparition de nouvelles interfaces" -#: option.c:402 +#: option.c:410 msgid "Export local names to global DNS" msgstr "Exporte les noms locaux dans le DNS global" -#: option.c:403 +#: option.c:411 msgid "Domain to export to global DNS" msgstr "Domaine à exporter dans le DNS global" -#: option.c:404 +#: option.c:412 msgid "Set TTL for authoritative replies" msgstr "Configure la durée de vie (Time To Live) pour les réponses faisant autorité" -#: option.c:405 +#: option.c:413 msgid "Set authoritive zone information" msgstr "Configure les informations pour une zone de nom faisant autorité" -#: option.c:406 +#: option.c:414 msgid "Secondary authoritative nameservers for forward domains" msgstr "Serveurs de noms secondaires faisant autorité pour les domaines délégués" -#: option.c:407 +#: option.c:415 msgid "Peers which are allowed to do zone transfer" msgstr "Pairs autorisés à faire des transferts de zone" -#: option.c:408 +#: option.c:416 msgid "Specify ipsets to which matching domains should be added" msgstr "Spécifie les ipsets auxquels les domaines correspondants doivent-être ajoutés" -#: option.c:410 +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "Spécifie le préfixe de classe DHCPv6" -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" @@ -637,300 +649,313 @@ msgstr "" "Usage : dnsmasq [options]\n" "\n" -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "Utilisez les options courtes uniquement sur la ligne de commande.\n" -#: option.c:600 +#: option.c:609 #, c-format msgid "Valid options are:\n" msgstr "Les options valides sont :\n" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "numéro de port incorrect" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "association d'interface non supportée" # -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 msgid "bad interface name" msgstr "nom d'interface invalide" # -#: option.c:720 +#: option.c:729 msgid "bad address" msgstr "mauvaise adresse" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "encapsulation d'option non supportée pour IPv6" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "mauvaise valeur de 'dhcp-option'" # -#: option.c:929 +#: option.c:945 msgid "bad IP address" msgstr "mauvaise adresse IP" # -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 msgid "bad IPv6 address" msgstr "mauvaise adresse IPv6" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "mauvais domaine dans dhcp-option" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "dhcp-option trop long" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "valeur illégale pour 'dhcp-match'" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "Une option ne pouvant être spécifié qu'une seule fois à été donnée plusieurs fois" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "Mot-clef ne pouvant être répété" -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, c-format msgid "cannot access directory %s: %s" msgstr "Ne peut pas lire le répertoire %s : %s" -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, c-format msgid "cannot access %s: %s" msgstr "Ne peut pas lire %s : %s" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "Sous android, impossible de positionner la cible (facility) pour les traces (logs)." -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "Mauvaise cible (facility) pour les traces." -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "préference MX incorrecte" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "nom MX incorrect" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "valeur MX cible incorrecte" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "ne peut exécuter de script sous uClinux" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "recompiler en définissant HAVE_SCRIPT pour permettre l'exécution de scripts shell au changement de bail (lease-change)" -#: option.c:1521 +#: option.c:1537 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "recompiler en définissant HAVE_LUASCRIPT pour permettre l'exécution de scripts LUA au changement de bail (lease-change)" -#: option.c:1631 +#: option.c:1739 option.c:1800 msgid "bad prefix" msgstr "mauvais préfixe" -#: option.c:2043 +#: option.c:2094 msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "recompiler en définissant HAVE_IPSET pour permettre l'utilisation de directives de groupes d'IP (IPset)" # -#: option.c:2223 +#: option.c:2274 msgid "bad port range" msgstr "gamme de ports incorrecte" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "interface-pont incorrecte" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "une seule étiquette est autorisée" -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "plage d'adresses DHCP (dhcp-range) incorrecte" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "plage d'adresses DHCP incohérente" -#: option.c:2402 -msgid "prefix must be exactly 64 for RA subnets" +#: option.c:2459 +#, fuzzy +msgid "prefix length must be exactly 64 for RA subnets" msgstr "la taille du préfixe doit être exactement 64 pour les sous-réseaux d'annonces de routeurs (RA)" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" +#: option.c:2461 +#, fuzzy +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "la taille du préfixe doit être exactement 64 pour le constructeur de sous-réseaux" -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2465 +#, fuzzy +msgid "prefix length must be at least 64" msgstr "la taille de préfixe doit être au minimum 64" -#: option.c:2412 +#: option.c:2468 msgid "inconsistent DHCPv6 range" msgstr "plage d'adresses DHCPv6 incohérente" -#: option.c:2519 option.c:2567 +#: option.c:2479 +#, fuzzy +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "la taille du préfixe doit être exactement 64 pour le constructeur de sous-réseaux" + +#: option.c:2590 option.c:2638 msgid "bad hex constant" msgstr "mauvaise constante hexadecimale" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "L'utilisation de labels est prohibée dans --dhcp-host" -#: option.c:2589 +#: option.c:2660 #, c-format msgid "duplicate dhcp-host IP address %s" msgstr "adresse IP dhcp-host dupliquée dans %s." # -#: option.c:2645 +#: option.c:2716 msgid "bad DHCP host name" msgstr "nom d'hôte DHCP incorrect" -#: option.c:2727 +#: option.c:2798 msgid "bad tag-if" msgstr "mauvaise étiquette tag-if" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "numéro de port invalide" # -#: option.c:3113 +#: option.c:3184 msgid "bad dhcp-proxy address" msgstr "adresse dhcp-proxy incorrecte" -#: option.c:3124 +#: option.c:3210 +#, fuzzy +msgid "Bad dhcp-relay" +msgstr "plage d'adresses DHCP (dhcp-range) incorrecte" + +#: option.c:3220 msgid "bad DUID" msgstr "mauvais identifiant unique DHCP (DUID)" # -#: option.c:3166 +#: option.c:3262 msgid "invalid alias range" msgstr "poids invalide" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "mauvais CNAME" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "ce CNAME existe déja" # -#: option.c:3230 +#: option.c:3330 msgid "bad PTR record" msgstr "mauvais champ PTR" # -#: option.c:3261 +#: option.c:3361 msgid "bad NAPTR record" msgstr "mauvais champ NAPTR" # -#: option.c:3295 +#: option.c:3395 msgid "bad RR record" msgstr "mauvais enregistrement RR" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "champ TXT invalide" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "champ SRV invalide" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "cible SRV invalide" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "priorité invalide" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "poids invalide" # -#: option.c:3417 +#: option.c:3517 msgid "Bad host-record" msgstr "mauvais champ host-record" -#: option.c:3434 +#: option.c:3534 msgid "Bad name in host-record" msgstr "mauvais nom dans le champ host-record" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "option non supportée (vérifier que Dnsmasq a été compilé avec le support DHCP/TFTP/DBus)" -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "il manque \"" -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "mauvaise option" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "paramètre en trop" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "paramètre manquant" -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "erreur" -#: option.c:3592 +#: option.c:3692 #, c-format msgid " at line %d of %s" msgstr "à la ligne %d de %s" -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "Ne peut pas lire %s : %s" -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, c-format msgid "read %s" msgstr "Lecture de %s" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "la ligne de commande contient des éléments indésirables ou incompréhensibles" -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Version de Dnsmasq %s %s\n" -#: option.c:3951 +#: option.c:4051 #, c-format msgid "" "Compile time options: %s\n" @@ -939,62 +964,62 @@ msgstr "" "Options à la compilation %s\n" "\n" -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Ce logiciel est fourni sans AUCUNE GARANTIE.\n" -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "Dnsmasq est un logiciel libre, il vous est permis de le redistribuer\n" -#: option.c:3954 +#: option.c:4054 #, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "sous les termes de la licence GPL (GNU General Public License), version 2 ou 3.\n" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "essayez avec --help" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "essayez avec -w" -#: option.c:3969 +#: option.c:4069 #, c-format msgid "bad command line options: %s" msgstr "mauvaises options en ligne de commande : %s." -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "ne peut pas obtenir le nom de la machine : %s" -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "seul un fichier resolv.conf est autorisé dans le mode no-poll" -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "un fichier resolv.conf (et un seul) est nécessaire pour y récuperer le nom de domaine." -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, c-format msgid "failed to read %s: %s" msgstr "impossible de lire %s : %s" -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "pas de directive de recherche trouvée dans %s" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "un domaine par défaut doit être spécifié lorsque l'option --dhcp-fqdn est utilisée" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "vérification de syntaxe OK" @@ -1013,103 +1038,108 @@ msgstr "le serveur de nom %s a refus msgid "possible DNS-rebind attack detected: %s" msgstr "détection d'une possible attaque de type DNS-rebind: %s" -#: network.c:414 +#: forward.c:1216 +#, fuzzy, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "Spécifie le nombre maximum de requêtes DHCP concurrentes (par défaut : %s)." + +#: network.c:551 #, c-format msgid "failed to create listening socket for %s: %s" msgstr "impossible de créer une socket d'écoute pour %s : %s" -#: network.c:743 +#: network.c:882 #, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "impossible de faire rejoindre l'interface %s dans le groupe multicast DHCPv6 %s" -#: network.c:937 +#: network.c:1076 #, c-format msgid "failed to bind server socket for %s: %s" msgstr "impossible de lier la socket de serveur pour %s : %s" -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "ignore le serveur de nom %s - interface locale" -#: network.c:985 +#: network.c:1124 #, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "ignore le serveur de nom %s - ne peut construire/lier la socket : %m" -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "non-qualifié(e)" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "noms" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "défaut" -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "domaine" -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "utilise les adresses locales seulement pour %s %s" -#: network.c:1011 +#: network.c:1150 #, c-format msgid "using standard nameservers for %s %s" msgstr "utilisation des serveurs de nom standards pour %s %s" -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "utilise le serveur de nom %s#%d pour %s %s" -#: network.c:1016 +#: network.c:1155 #, c-format msgid "using nameserver %s#%d(via %s)" msgstr "utilise le serveur de nom %s#%d (via %s)" -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "utilise le serveur de nom %s#%d" # -#: dnsmasq.c:131 +#: dnsmasq.c:134 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "TFTP n'est pas disponible : activez HAVE_TFTP dans src/config.h" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "impossible d'utiliser conjointement --conntrack et --query-port" # -#: dnsmasq.c:139 +#: dnsmasq.c:142 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "Support de suivi de connexion non disponible : activez HAVE_CONNTRACK dans src/config.h" -#: dnsmasq.c:144 +#: dnsmasq.c:147 msgid "asychronous logging is not available under Solaris" msgstr "l'écriture de traces en mode asynchrone n'est pas disponible sous Solaris." -#: dnsmasq.c:149 +#: dnsmasq.c:152 msgid "asychronous logging is not available under Android" msgstr "l'écriture de traces en mode asynchrone n'est pas disponible sous Android." -#: dnsmasq.c:154 +#: dnsmasq.c:157 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "le mode « autorité DNS » n'est pas disponible : activez HAVE_AUTH dans src/config.h" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "le numéro de série de la zone doit être configuré dans --auth-soa" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "le constructeur de plage dhcp n'est pas disponible sur cette plate-forme" @@ -1127,429 +1157,434 @@ msgstr "impossible de trouver la liste des interfaces : %s" msgid "unknown interface %s" msgstr "interface %s inconnue" -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "Erreur DBus : %s" -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "DBus n'est pas disponible : activez HAVE_DBUS dans src/config.h" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "utilisateur ou groupe inconnu : %s" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "Ne peut effectuer un 'chdir' à la racine du système de fichier : %s" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, c-format msgid "started, version %s DNS disabled" msgstr "démarrage avec le DNS désactivé (version %s)" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "demarré, version %s (taille de cache %d)" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "démarrage avec le cache désactivé (version %s)" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "options à la compilation : %s" -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "Support DBus autorisé : connecté au bus système" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "Support DBus autorisé : connexion au bus en attente" -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, c-format msgid "warning: failed to change owner of %s: %s" msgstr "Impossible de changer pour l'utilisateur %s : %s" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "active l'option --bind-interfaces à cause de limitations dans le système d'exploitation" -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "attention : l'interface %s n'existe pas actuellement" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "attention : l'option « resolv-file » sera ignorée car « no-resolv » a été spécifié" # -#: dnsmasq.c:633 +#: dnsmasq.c:634 msgid "warning: no upstream servers configured" msgstr "attention : aucun serveur amont n'est configuré" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "mode asynchrone d'écriture de traces, la taille maximum de la queue est de %d messages." -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "annonces de routeur IPv6 activées" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "root est" # -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "enabled" msgstr "activé" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "mode sécurisé" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "le nombre maximum de transferts TFTP simultanés sera restreint à %d" -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "connecté au systeme DBus" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "Ne peut se lancer en tâche de fond : %s" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, c-format msgid "failed to create helper: %s" msgstr "impossible de créer le 'helper' : %s" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, c-format msgid "setting capabilities failed: %s" msgstr "impossible de configurer la capacité %s" -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, c-format msgid "failed to change user-id to %s: %s" msgstr "Impossible de changer l'identifiant utilisateur pour %s : %s" -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, c-format msgid "failed to change group-id to %s: %s" msgstr "Impossible de changer l'identifiant de groupe pour %s : %s" -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, c-format msgid "failed to open pidfile %s: %s" msgstr "impossible de lire le fichier de PID %s : %s" -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, c-format msgid "cannot open log %s: %s" msgstr "Ne peut ouvrir le fichier de log %s : %s" # -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, c-format msgid "failed to load Lua script: %s" msgstr "impossible de charger le script Lua : %s" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "répertoire TFTP %s inaccessible : %s" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, c-format msgid "script process killed by signal %d" msgstr "Le script a été terminé par le signal %d" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, c-format msgid "script process exited with status %d" msgstr "Le script s'est terminé avec le statut %d" -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, c-format msgid "failed to execute %s: %s" msgstr "impossible d'exécuter à %s : %s" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "sortie sur réception du signal SIGTERM" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, c-format msgid "failed to access %s: %s" msgstr "impossible d'accéder à %s : %s" -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "Lecture de %s" -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, c-format msgid "no servers found in %s, will retry" msgstr "aucun serveur trouvé dans %s, va réessayer" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "ne peut créer la socket DHCP: %s" -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "impossible d'appliquer les options sur la socket DHCP : %s" -#: dhcp.c:77 +#: dhcp.c:89 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "impossible de déclarer SO_REUSE{ADDR|PORT} sur la socket DHCP : %s" -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "impossible de lier la socket serveur DHCP : %s" -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "ne peut créer de socket en mode raw pour ICMP : %s." -#: dhcp.c:225 +#: dhcp.c:239 #, c-format msgid "unknown interface %s in bridge-interface" msgstr "interface %s inconnue spécifiée comme interface de pont" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "Paquet DHCP reçu sur %s qui n'a pas d'adresse" -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "La plage d'adresses DHCP %s -- %s n'est pas cohérente avec le masque de réseau %s" -#: dhcp.c:832 +#: dhcp.c:806 #, c-format msgid "bad line at %s line %d" msgstr "mauvaise ligne dans %s ligne %d" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "ignore %s à la ligne %d : duplication de nom ou d'adresse IP" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + #: lease.c:61 #, c-format msgid "cannot open or create lease file %s: %s" msgstr "ne peut ouvrir ou créer le fichiers de baux %s : %s" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "beaucoup trop de baux enregistrés" -#: lease.c:164 +#: lease.c:165 #, c-format msgid "cannot run lease-init script %s: %s" msgstr "Ne peut pas exécuter le script lease-init %s : %s" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "le script lease-init a retourné le code %s" -#: lease.c:339 +#: lease.c:342 #, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "impossible de lire %s : %s (prochain essai dans %us)" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "Le domaine %s est ignoré pour l'hôte DHCP %s" -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "pas de plage d'adresse disponible pour la requête DHCP %s %s" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "avec sélecteur de sous-reseau" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "par l'intermédiaire de" -#: rfc2131.c:350 +#: rfc2131.c:351 #, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "%u sous-réseaux DHCP disponibles : %s/%s" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, c-format msgid "%u available DHCP range: %s -- %s" msgstr "%u la gamme DHCP disponible est : %s -- %s" -#: rfc2131.c:382 -msgid "disabled" -msgstr "désactivé" - -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "ignoré" - -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "adresse déjà utilisée" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "pas d'adresse disponible" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "mauvais réseau" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "pas d'adresse configurée" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "plus aucun bail disponible" - -#: rfc2131.c:576 rfc3315.c:428 -#, c-format -msgid "%u client provides name: %s" -msgstr "le client %u fourni le nom : %s" - -#: rfc2131.c:731 +#: rfc2131.c:465 #, c-format msgid "%u vendor class: %s" msgstr "%u Classe de vendeur ('Vendor Class') : %s" -#: rfc2131.c:733 +#: rfc2131.c:467 #, c-format msgid "%u user class: %s" msgstr "%u Classe d'utilisateur : %s" +#: rfc2131.c:494 +msgid "disabled" +msgstr "désactivé" + +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "ignoré" + +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "adresse déjà utilisée" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "pas d'adresse disponible" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "mauvais réseau" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "pas d'adresse configurée" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "plus aucun bail disponible" + +#: rfc2131.c:687 rfc3315.c:466 +#, c-format +msgid "%u client provides name: %s" +msgstr "le client %u fourni le nom : %s" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "Service PXE BIS (Boot Integrity Services) non supporté" -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "désactive l'adresse statique DHCP %s pour %s" -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "bail inconnu" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "L'adresse statique %s ne sera pas utilisée car un bail est déjà attribué à %s" -#: rfc2131.c:986 +#: rfc2131.c:994 #, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "L'adresse statique %s ne sera pas utilisée car elle est utilisée par le serveur ou un relai" -#: rfc2131.c:989 +#: rfc2131.c:997 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "L'adresse statique %s ne sera pas utilisée car elle a préalablement été refusée" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "pas d'identifiant unique" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "mauvais identifiant de serveur" -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "mauvaise adresse" -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "bail non trouvé" -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "adresse non disponible" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "bail statique disponible" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "adresse reservée" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "abandon du bail de %s pour %s" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "%u nom de fichier 'bootfile' : %s" -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, c-format msgid "%u server name: %s" msgstr "%u nom du serveur : %s" -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, c-format msgid "%u next server: %s" msgstr "%u serveur suivant : %s" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "%u réponse broadcast" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "Impossible d'envoyer l'option DHCP/BOOTP %d : pas assez d'espace dans le paquet" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "menu PXE trop grand" -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, c-format msgid "%u requested options: %s" msgstr "%u options demandées : %s" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "ne peux envoyer l'option RFC3925 : trop d'options pour le numéro d'entreprise %d" @@ -1559,7 +1594,7 @@ msgstr "ne peux envoyer l'option RFC3925 : trop d'options pour le num msgid "cannot create netlink socket: %s" msgstr "ne peux lier une socket netlink : %s" -#: netlink.c:354 +#: netlink.c:363 #, c-format msgid "netlink returns error: %s" msgstr "Erreur netlink : %s" @@ -1568,53 +1603,53 @@ msgstr "Erreur netlink : %s" msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "tentative de lier une adresse serveur IPV6 via DBus - pas de support IPV6" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "configuration des serveurs amonts à partir de DBus" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "ne peut enregistrer une routine de traitement des messages DBus" -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "impossible de créer une socket BPF pour DHCP : %s" -#: bpf.c:225 +#: bpf.c:273 #, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "requête DHCP pour un type de matériel non supporté (%d) reçue sur %s" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "la fonction lease() est absente du script Lua" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "impossible d'obtenir un port libre pour TFTP" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "requête de %s non supportée" -#: tftp.c:420 +#: tftp.c:433 #, c-format msgid "file %s not found" msgstr "fichier %s non trouvé" -#: tftp.c:529 +#: tftp.c:542 #, c-format msgid "error %d %s received from %s" msgstr "erreur %d %s reçu de %s" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "failed sending %s to %s" msgstr "impossible d'envoyer %s à %s" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "sent %s to %s" msgstr "envoyé %s à %s" @@ -1638,176 +1673,195 @@ msgstr "IMPOSSIBLE de d msgid "Conntrack connection mark retrieval failed: %s" msgstr "La récupération de la marque de suivi de connexion a échoué : %s" -#: dhcp6.c:49 +#: dhcp6.c:59 #, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "ne peut créer la socket DHCPv6: %s" -#: dhcp6.c:62 +#: dhcp6.c:80 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "impossible de déclarer SO_REUSE{ADDR|PORT} sur la socket DHCPv6 : %s" -#: dhcp6.c:74 +#: dhcp6.c:92 #, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "impossible de lier la socket serveur DHCPv6 : %s" -#: rfc3315.c:135 +#: rfc3315.c:149 #, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "pas de plage d'adresse disponible pour la requête DHCPv6 transmise via le relai %s" -#: rfc3315.c:144 +#: rfc3315.c:158 #, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "pas de plage d'adresse disponible pour la requête DHCPv6 via %s" -#: rfc3315.c:269 +#: rfc3315.c:289 #, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "%u sous-réseaux DHCPv6 disponibles : %s/%d" -#: rfc3315.c:350 +#: rfc3315.c:370 #, c-format msgid "%u vendor class: %u" msgstr "%u Classe de vendeur ('Vendor Class') : %u" -#: rfc3315.c:609 +#: rfc3315.c:418 +#, fuzzy, c-format +msgid "%u client MAC address: %s" +msgstr "le client %u fourni le nom : %s" + +#: rfc3315.c:650 #, c-format msgid "unknown prefix-class %d" msgstr "préfixe de classe inconnu %d" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "réussi" -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 msgid "no addresses available" msgstr "pas d'adresse disponible" -#: rfc3315.c:806 +#: rfc3315.c:855 msgid "address unavailable" msgstr "adresse non disponible" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "pas sur ce lien" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "aucune liaison trouvée" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "obsolète" -#: rfc3315.c:951 +#: rfc3315.c:1006 msgid "address invalid" msgstr "adresse non valide" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "confirmation d'échec" -#: rfc3315.c:1003 +#: rfc3315.c:1059 msgid "all addresses still on link" msgstr "toutes les adresses sont toujours sur le lien" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "libération reçue" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "L'option dhcp-option redondante %d sera ignorée" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "%u options: %s" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "%s a plus d'une adresse dans le fichier d'hôte, utilisation de %s pour le DHCP." -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "adresse IP %s (%s) dupliquée dans la directive dhcp-config." -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "impossible de déclarer SO_BINDTODEVICE sur la socket DHCP : %s" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "Options DHCP connues :\n" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, c-format msgid "Known DHCPv6 options:\n" msgstr "Options DHCPv6 connues :\n" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr ", préfixe obsolète" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr ", durée de bail " -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "%s sans état (stateless) sur %s%.0s%.0s%s" -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "%s, baux statiques seulement sur %.0s%s%s%.0s" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "%s, proxy sur le sous-réseau %.0s%s%.0s" -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "%s, plage d'adresses IP %s -- %s%s%.0s" -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "noms IPv6 dérivés de DHCPv4 sur %s%s" -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, c-format msgid "router advertisement on %s%s" msgstr "annonces de routeurs sur %s%s" -#: radv.c:87 +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + +#: radv.c:93 #, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "ne peut créer la socket ICMPv6: %s" -#: auth.c:402 +#: auth.c:435 #, c-format msgid "ignoring zone transfer request from %s" msgstr "la requête de transfert de zone en provenance de %s est ignorée" -#: ipset.c:71 +#: ipset.c:95 #, c-format msgid "failed to find kernel version: %s" msgstr "impossible de trouver la version de noyau : %s" -#: ipset.c:90 +#: ipset.c:114 #, c-format msgid "failed to create IPset control socket: %s" msgstr "impossible de créer une socket de contrôle IPset : %s" diff --git a/po/id.po b/po/id.po index 130738d..7e0c470 100644 --- a/po/id.po +++ b/po/id.po @@ -22,19 +22,19 @@ msgid "failed to load names from %s: %s" msgstr "gagal memuat nama-nama dari %s: %s" # OK -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, fuzzy, c-format msgid "bad address at %s line %d" msgstr "kesalahan nama pada %s baris %d" # OK -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "kesalahan nama pada %s baris %d" # OK -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "membaca %s - %d alamat" @@ -44,39 +44,39 @@ msgstr "membaca %s - %d alamat" msgid "cleared cache" msgstr "cache telah dihapus" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "" # OK -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "tidak memberikan nama %s kepada lease DHCP %s karena nama telah ada dalam %sdengan alamat %s" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "" # OK -#: cache.c:1163 +#: cache.c:1131 #, fuzzy, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "ukuran cache %d, %d/%d penyisipan cache menimpa cache yang belum kadaluwarsa" -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "" @@ -88,637 +88,649 @@ msgid "failed to seed the random number generator: %s" msgstr "gagal mendengarkan di socket: %s" # OK -#: util.c:189 +#: util.c:192 #, fuzzy msgid "failed to allocate memory" msgstr "gagal memuat %S: %m" # OK -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "tidak bisa mendapatkan memory" # OK -#: util.c:237 +#: util.c:240 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "tidak bisa membaca %s: %s" # OK -#: util.c:245 +#: util.c:248 #, fuzzy, c-format msgid "failed to allocate %d bytes" msgstr "gagal memuat %S: %m" # OK -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "tak terbatas" # OK -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "Tentukan alamat lokal untuk mendengarkan." # OK -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "Menghasilkan ipaddr untuk semua host dalam domain yang dipilih." # OK -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "Fake pencarian balik untuk alamat private sesuai dengan RFC1918." # OK -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "Perlakukan ipaddr sebagai NXDOMAIN (mengalahkan wildcard Verisign)." # OK -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "Tentukan ukuran cache, dalam jumlah isian (default %s)." # OK -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "Tentukan file konfigurasi (default %s)." # OK -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "JANGAN berjalan di background: berjalan dalam modus debug." # OK -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "JANGAN teruskan permintaan tanpa bagian domain." # OK -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "Mengembalikan record MX untuk diri sendiri host-host lokal." # OK -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "Melengkapi nama-nama di /etc/hosts dengan akhiran domain." # OK -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "Jangan meneruskan permintaan DNS spurious dari host-host Windows." # OK -#: option.c:297 +#: option.c:303 msgid "Enable DHCP in the range given with lease duration." msgstr "Bolehkan DHCP dalam jangkauan yang diberikan dengan durasi lease." # OK -#: option.c:298 +#: option.c:304 #, c-format msgid "Change to this group after startup (defaults to %s)." msgstr "Ubah ke group ini setelah mulai (default %s)." # OK -#: option.c:299 +#: option.c:305 msgid "Set address or hostname for a specified machine." msgstr "Setel alamat atau nama host untuk mesin yang disebutkan." # OK -#: option.c:300 +#: option.c:306 #, fuzzy msgid "Read DHCP host specs from file." msgstr "nama MX salah" -#: option.c:301 +#: option.c:307 msgid "Read DHCP option specs from file." msgstr "" -#: option.c:302 +#: option.c:308 msgid "Evaluate conditional tag expression." msgstr "" # OK -#: option.c:303 +#: option.c:309 #, c-format msgid "Do NOT load %s file." msgstr "JANGAN muat file %s." # OK -#: option.c:304 +#: option.c:310 #, c-format msgid "Specify a hosts file to be read in addition to %s." msgstr "Sebutkan sebuah file hosts yang harus dibaca sebagai tambahan untuk %s." # OK -#: option.c:305 +#: option.c:311 msgid "Specify interface(s) to listen on." msgstr "Sebutkan antarmuka untuk mendengarkan." # OK -#: option.c:306 +#: option.c:312 msgid "Specify interface(s) NOT to listen on." msgstr "Sebutkan antarmuka untuk TIDAK mendengarkan." # OK -#: option.c:307 +#: option.c:313 #, fuzzy msgid "Map DHCP user class to tag." msgstr "Petakan kelas user DHCP ke setelan yang dipilih." -#: option.c:308 +#: option.c:314 msgid "Map RFC3046 circuit-id to tag." msgstr "" -#: option.c:309 +#: option.c:315 msgid "Map RFC3046 remote-id to tag." msgstr "" -#: option.c:310 +#: option.c:316 msgid "Map RFC3993 subscriber-id to tag." msgstr "" # OK -#: option.c:311 +#: option.c:317 #, fuzzy msgid "Don't do DHCP for hosts with tag set." msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih." # OK -#: option.c:312 +#: option.c:318 #, fuzzy msgid "Force broadcast replies for hosts with tag set." msgstr "Jangan menggunakan DHCP untuk host-host yang dipilih." # OK -#: option.c:313 +#: option.c:319 msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "JANGAN berjalan di background, jangan berjalan dalam modus debug." # OK -#: option.c:314 +#: option.c:320 msgid "Assume we are the only DHCP server on the local network." msgstr "Berpikir bahwa kita satu-satunya DHCP server dalam jaringan." # OK -#: option.c:315 +#: option.c:321 #, c-format msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "Sebutkan lokasi untuk menyimpan lease DHCP (default %s)." # OK -#: option.c:316 +#: option.c:322 msgid "Return MX records for local hosts." msgstr "Kembalikan rekord MX untuk host-host lokal." # OK -#: option.c:317 +#: option.c:323 msgid "Specify an MX record." msgstr "Sebutkan sebuah rekord MX." # OK -#: option.c:318 +#: option.c:324 msgid "Specify BOOTP options to DHCP server." msgstr "Sebutkan pilihan-pilihan BOOTP untuk DHCP server." -#: option.c:319 +#: option.c:325 #, c-format msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "Jangan kumpulkan file %s, muat kembali saat SIGHUP." # OK -#: option.c:320 +#: option.c:326 msgid "Do NOT cache failed search results." msgstr "JANGAN menyimpan hasil pencarian yang gagal." # OK -#: option.c:321 +#: option.c:327 #, c-format msgid "Use nameservers strictly in the order given in %s." msgstr "Gunakan secara ketat namaserver yang disebutkan sesuai urutan di %s." # OK -#: option.c:322 +#: option.c:328 #, fuzzy msgid "Specify options to be sent to DHCP clients." msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP." -#: option.c:323 +#: option.c:329 msgid "DHCP option sent even if the client does not request it." msgstr "" # OK -#: option.c:324 +#: option.c:330 msgid "Specify port to listen for DNS requests on (defaults to 53)." msgstr "Sebutkan port untuk mendengarkan permintaan DNS (default port 53)." # OK -#: option.c:325 +#: option.c:331 #, c-format msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." msgstr "Ukuran maksimum paket UDP yang didukung untuk EDNS.0 (default %s)." # OK -#: option.c:326 +#: option.c:332 #, fuzzy msgid "Log DNS queries." msgstr "Permintaan log." # OK -#: option.c:327 +#: option.c:333 #, fuzzy msgid "Force the originating port for upstream DNS queries." msgstr "Paksa port asal untuk permintaan ke atas." # OK -#: option.c:328 +#: option.c:334 msgid "Do NOT read resolv.conf." msgstr "JANGAN baca resolv.conf." # OK -#: option.c:329 +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "Sebutkan path ke resolv.conf (default %s)." # OK -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "Sebutkan alamat-alamat server di atas, boleh dilengkapi dengan nama domain." # OK -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "JANGAN pernah meneruskan permintaan ke domain yang disebutkan." # OK -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "Sebutkan domain yang digunakan dalam lease DHCP." # OK -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "Sebutkan tujuan default dalam rekord MX." # OK -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts." # OK -#: option.c:335 +#: option.c:341 #, fuzzy msgid "Specify time-to-live in seconds for negative caching." msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts." # OK -#: option.c:336 +#: option.c:342 #, fuzzy msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "Sebutkan time-to-live dalam detik untuk jawaban dari /etc/hosts." # OK -#: option.c:337 +#: option.c:343 #, c-format msgid "Change to this user after startup. (defaults to %s)." msgstr "Ubah ke user ini setelah mulai. (default %s)." # OK -#: option.c:338 +#: option.c:344 #, fuzzy msgid "Map DHCP vendor class to tag." msgstr "Memetakan kelas vendor DHCP ke daftar pilihan." # OK -#: option.c:339 +#: option.c:345 msgid "Display dnsmasq version and copyright information." msgstr "Menampilkan versi dan informasi hak cipta dnsmasq." # OK -#: option.c:340 +#: option.c:346 msgid "Translate IPv4 addresses from upstream servers." msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas." # OK -#: option.c:341 +#: option.c:347 msgid "Specify a SRV record." msgstr "Sebutkan rekord SRV." -#: option.c:342 +#: option.c:348 msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "" # OK -#: option.c:343 +#: option.c:349 #, fuzzy, c-format msgid "Specify path of PID file (defaults to %s)." msgstr "Sebutkan path file PID. (default %s)." # OK -#: option.c:344 +#: option.c:350 #, c-format msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)." # OK -#: option.c:345 +#: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." msgstr "Jawab permintaan DNS berdasarkan antarmuka dimana permintaan dikirimkan." # OK -#: option.c:346 +#: option.c:352 msgid "Specify TXT DNS record." msgstr "Sebutkan rekord TXT DNS." # OK -#: option.c:347 +#: option.c:353 #, fuzzy msgid "Specify PTR DNS record." msgstr "Sebutkan rekord TXT DNS." -#: option.c:348 +#: option.c:354 msgid "Give DNS name to IPv4 address of interface." msgstr "" # OK -#: option.c:349 +#: option.c:355 msgid "Bind only to interfaces in use." msgstr "Hanya kaitkan ke antarmuka yang sedang digunakan saja." # OK -#: option.c:350 +#: option.c:356 #, c-format msgid "Read DHCP static host information from %s." msgstr "Baca informasi statik host DHCP dari %s." # OK -#: option.c:351 +#: option.c:357 msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "Mungkinkan antar muka DBus untuk menyetel server-server di atas, dsb." # OK -#: option.c:352 +#: option.c:358 msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "JANGAN menyediakan DHCP pada antarmuka ini, hanya menyediakan DNS." # OK -#: option.c:353 +#: option.c:359 msgid "Enable dynamic address allocation for bootp." msgstr "Mungkinkan alokasi alamat dinamis untuk bootp." # OK -#: option.c:354 +#: option.c:360 #, fuzzy msgid "Map MAC address (with wildcards) to option set." msgstr "Memetakan kelas vendor DHCP ke daftar pilihan." -#: option.c:355 +#: option.c:361 msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "" -#: option.c:356 +#: option.c:362 msgid "Disable ICMP echo address checking in the DHCP server." msgstr "" -#: option.c:357 +#: option.c:363 msgid "Shell script to run on DHCP lease creation and destruction." msgstr "" -#: option.c:358 +#: option.c:364 msgid "Lua script to run on DHCP lease creation and destruction." msgstr "" -#: option.c:359 +#: option.c:365 msgid "Run lease-change scripts as this user." msgstr "" -#: option.c:360 +#: option.c:366 msgid "Read configuration from all the files in this directory." msgstr "" # OK -#: option.c:361 +#: option.c:367 #, fuzzy msgid "Log to this syslog facility or file. (defaults to DAEMON)" msgstr "Ubah ke user ini setelah mulai. (default %s)." -#: option.c:362 +#: option.c:368 msgid "Do not use leasefile." msgstr "" # OK -#: option.c:363 +#: option.c:369 #, fuzzy, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)." -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "" -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "" -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "" -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "" -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "" -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "" -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "" # OK -#: option.c:371 +#: option.c:377 #, fuzzy, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)." -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "" -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "" -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "" -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "" -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "" -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "" -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "" -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "" -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "" -#: option.c:382 -msgid "Use alternative ports for DHCP." -msgstr "" - -# OK -#: option.c:383 -#, fuzzy -msgid "Specify NAPTR DNS record." -msgstr "Sebutkan rekord TXT DNS." - -#: option.c:384 -msgid "Specify lowest port available for DNS query transmission." -msgstr "" - -#: option.c:385 -msgid "Use only fully qualified domain names for DHCP clients." -msgstr "" - -#: option.c:386 -msgid "Generate hostnames based on MAC address for nameless clients." -msgstr "" - -#: option.c:387 -msgid "Use these DHCP relays as full proxies." -msgstr "" - #: option.c:388 -msgid "Specify alias name for LOCAL DNS name." +msgid "Use alternative ports for DHCP." msgstr "" # OK #: option.c:389 #, fuzzy -msgid "Prompt to send to PXE clients." -msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP." +msgid "Specify NAPTR DNS record." +msgstr "Sebutkan rekord TXT DNS." #: option.c:390 -msgid "Boot service for PXE menu." +msgid "Specify lowest port available for DNS query transmission." msgstr "" #: option.c:391 -msgid "Check configuration syntax." +msgid "Use only fully qualified domain names for DHCP clients." msgstr "" #: option.c:392 +msgid "Generate hostnames based on MAC address for nameless clients." +msgstr "" + +#: option.c:393 +msgid "Use these DHCP relays as full proxies." +msgstr "" + +#: option.c:394 +msgid "Relay DHCP requests to a remote server" +msgstr "" + +#: option.c:395 +msgid "Specify alias name for LOCAL DNS name." +msgstr "" + +# OK +#: option.c:396 +#, fuzzy +msgid "Prompt to send to PXE clients." +msgstr "Setel pilihan-pilihan tambahan yang akan disetel untuk klien-klien DHCP." + +#: option.c:397 +msgid "Boot service for PXE menu." +msgstr "" + +#: option.c:398 +msgid "Check configuration syntax." +msgstr "" + +#: option.c:399 msgid "Add requestor's MAC address to forwarded DNS queries." msgstr "" # OK -#: option.c:393 +#: option.c:400 #, fuzzy msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "Terjemahkan alamat-alamat IPv4 dari server-server di atas." -#: option.c:394 +#: option.c:401 msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "" -#: option.c:395 +#: option.c:402 msgid "Copy connection-track mark from queries to upstream connections." msgstr "" -#: option.c:396 +#: option.c:403 msgid "Allow DHCP clients to do their own DDNS updates." msgstr "" -#: option.c:397 +#: option.c:404 msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "" -#: option.c:398 +#: option.c:405 +msgid "Always send frequent router-advertisements" +msgstr "" + +#: option.c:406 msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "" # OK -#: option.c:399 +#: option.c:407 #, fuzzy msgid "Specify host (A/AAAA and PTR) records" msgstr "Sebutkan sebuah rekord MX." # OK -#: option.c:400 +#: option.c:408 #, fuzzy msgid "Specify arbitrary DNS resource record" msgstr "Sebutkan rekord TXT DNS." # OK -#: option.c:401 +#: option.c:409 #, fuzzy msgid "Bind to interfaces in use - check for new interfaces" msgstr "antarmuka tidak dikenal %s" -#: option.c:402 +#: option.c:410 msgid "Export local names to global DNS" msgstr "" -#: option.c:403 +#: option.c:411 msgid "Domain to export to global DNS" msgstr "" -#: option.c:404 +#: option.c:412 msgid "Set TTL for authoritative replies" msgstr "" -#: option.c:405 +#: option.c:413 msgid "Set authoritive zone information" msgstr "" -#: option.c:406 +#: option.c:414 msgid "Secondary authoritative nameservers for forward domains" msgstr "" -#: option.c:407 +#: option.c:415 msgid "Peers which are allowed to do zone transfer" msgstr "" -#: option.c:408 +#: option.c:416 msgid "Specify ipsets to which matching domains should be added" msgstr "" -#: option.c:410 +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "" # OK -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" @@ -728,351 +740,361 @@ msgstr "" "\n" # OK -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "Gunakan pilihan pendek saja pada perintah baris.\n" # OK -#: option.c:600 +#: option.c:609 #, fuzzy, c-format msgid "Valid options are:\n" msgstr "Pilihan yang boleh adalah:\n" # OK -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "port salah" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "" # OK -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 #, fuzzy msgid "bad interface name" msgstr "nama MX salah" # OK -#: option.c:720 +#: option.c:729 #, fuzzy msgid "bad address" msgstr "membaca %s - %d alamat" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "" # OK -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "dhcp-option salah" # OK -#: option.c:929 +#: option.c:945 #, fuzzy msgid "bad IP address" msgstr "membaca %s - %d alamat" # OK -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 #, fuzzy msgid "bad IPv6 address" msgstr "membaca %s - %d alamat" # OK -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "domain dalam dhcp-option salah" # OK -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "dhcp-option terlalu panjang" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "" # OK -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "tidak bisa membaca %s: %s" # OK -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "tidak bisa membaca %s: %s" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "" -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "" # OK -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "kesukaan MX salah" # OK -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "nama MX salah" # OK -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "target MX salah" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "" -#: option.c:1521 +#: option.c:1537 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "" # OK -#: option.c:1631 +#: option.c:1739 option.c:1800 #, fuzzy msgid "bad prefix" msgstr "port salah" -#: option.c:2043 +#: option.c:2094 msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "" # OK -#: option.c:2223 +#: option.c:2274 #, fuzzy msgid "bad port range" msgstr "port salah" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "" # OK -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "dhcp-range salah" # OK -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "jangkauan DHCP tidak konsisten" -#: option.c:2402 -msgid "prefix must be exactly 64 for RA subnets" +#: option.c:2459 +msgid "prefix length must be exactly 64 for RA subnets" msgstr "" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" +#: option.c:2461 +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "" -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2465 +msgid "prefix length must be at least 64" msgstr "" # OK -#: option.c:2412 +#: option.c:2468 #, fuzzy msgid "inconsistent DHCPv6 range" msgstr "jangkauan DHCP tidak konsisten" +#: option.c:2479 +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "" + # OK -#: option.c:2519 option.c:2567 +#: option.c:2590 option.c:2638 #, fuzzy msgid "bad hex constant" msgstr "dhcp-host salah" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "" # OK -#: option.c:2589 +#: option.c:2660 #, fuzzy, c-format msgid "duplicate dhcp-host IP address %s" msgstr "alamat IP kembar %s dalam direktif dhcp-config" # OK -#: option.c:2645 +#: option.c:2716 #, fuzzy msgid "bad DHCP host name" msgstr "nama MX salah" # OK -#: option.c:2727 +#: option.c:2798 #, fuzzy msgid "bad tag-if" msgstr "target MX salah" # OK -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "nomor port tidak benar" # OK -#: option.c:3113 +#: option.c:3184 #, fuzzy msgid "bad dhcp-proxy address" msgstr "membaca %s - %d alamat" -#: option.c:3124 +# OK +#: option.c:3210 +#, fuzzy +msgid "Bad dhcp-relay" +msgstr "dhcp-range salah" + +#: option.c:3220 msgid "bad DUID" msgstr "" # OK -#: option.c:3166 +#: option.c:3262 #, fuzzy msgid "invalid alias range" msgstr "weight tidak benar" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "" # OK -#: option.c:3230 +#: option.c:3330 #, fuzzy msgid "bad PTR record" msgstr "rekord SRV salah" # OK -#: option.c:3261 +#: option.c:3361 #, fuzzy msgid "bad NAPTR record" msgstr "rekord SRV salah" # OK -#: option.c:3295 +#: option.c:3395 #, fuzzy msgid "bad RR record" msgstr "rekord SRV salah" # OK -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "rekord TXT salah" # OK -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "rekord SRV salah" # OK -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "target SRV salah" # OK -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "prioritas tidak benar" # OK -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "weight tidak benar" # OK -#: option.c:3417 +#: option.c:3517 #, fuzzy msgid "Bad host-record" msgstr "rekord SRV salah" # OK -#: option.c:3434 +#: option.c:3534 #, fuzzy msgid "Bad name in host-record" msgstr "kesalahan nama di %s" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "" # OK -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "kurang \"" # OK -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "pilihan salah" # OK -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "parameter berlebihan" # OK -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "parameter kurang" # OK -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "kesalahan" # OK -#: option.c:3592 +#: option.c:3692 #, fuzzy, c-format msgid " at line %d of %s" msgstr "%s pada baris %d dari %%s" # OK -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "tidak bisa membaca %s: %s" # OK -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, fuzzy, c-format msgid "read %s" msgstr "membaca %s" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "" # OK -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Dnsmasq versi %s %s\n" # OK -#: option.c:3951 +#: option.c:4051 #, fuzzy, c-format msgid "" "Compile time options: %s\n" @@ -1082,70 +1104,70 @@ msgstr "" "\n" # OK -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n" # OK -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "Dnsdmasq adalah perangkat lunak bebas, dan Anda dipersilahkan untuk membagikannya\n" # OK -#: option.c:3954 +#: option.c:4054 #, fuzzy, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "dengan aturan GNU General Public License, versi 2.\n" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "" # OK -#: option.c:3969 +#: option.c:4069 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "pilihan baris perintah salah: %s." # OK -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "tidak bisa mendapatkan host-name: %s" # OK -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "hanya satu file resolv.conf yang diperbolehkan dalam modus no-poll." # OK -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "harus mempunyai tepat satu resolv.conf untuk mendapatkan nama domain." # OK -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "gagal membaca %s: %s" # OK -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "tidak ditemukan direktif search di %s" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "" @@ -1167,117 +1189,123 @@ msgid "possible DNS-rebind attack detected: %s" msgstr "" # OK -#: network.c:414 +#: forward.c:1216 +#, fuzzy, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "Sebutkan jumlah maksimum lease DHCP (default %s)." + +# OK +#: network.c:551 #, fuzzy, c-format msgid "failed to create listening socket for %s: %s" msgstr "gagal membuat socket: %s " # OK -#: network.c:743 +#: network.c:882 #, fuzzy, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "gagal mem-bind socket server DHCP: %s" -#: network.c:937 +#: network.c:1076 #, fuzzy, c-format msgid "failed to bind server socket for %s: %s" msgstr "gagal mem-bind socket untuk mendengarkan %s: %s" # OK -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "mengabaikan nameserver %s - antarmuka lokal" # OK -#: network.c:985 +#: network.c:1124 #, fuzzy, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "mengabaikan nameserver %s - tak dapat membuat/mem-bind socket: %s" # OK -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "tidak memenuhi syarat" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "" # OK -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "domain" # OK -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "menggunakan alamat lokal saja untuk %s %s" # OK -#: network.c:1011 +#: network.c:1150 #, fuzzy, c-format msgid "using standard nameservers for %s %s" msgstr "menggunakan nameserver %s#%d untuk %s %s" # OK -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "menggunakan nameserver %s#%d untuk %s %s" # OK -#: network.c:1016 +#: network.c:1155 #, fuzzy, c-format msgid "using nameserver %s#%d(via %s)" msgstr "menggunakan nameserver %s#%d" # OK -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "menggunakan nameserver %s#%d" # OK -#: dnsmasq.c:131 +#: dnsmasq.c:134 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "" # OK -#: dnsmasq.c:139 +#: dnsmasq.c:142 #, fuzzy msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h" -#: dnsmasq.c:144 +#: dnsmasq.c:147 msgid "asychronous logging is not available under Solaris" msgstr "" -#: dnsmasq.c:149 +#: dnsmasq.c:152 msgid "asychronous logging is not available under Android" msgstr "" # OK -#: dnsmasq.c:154 +#: dnsmasq.c:157 #, fuzzy msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "" @@ -1298,267 +1326,272 @@ msgid "unknown interface %s" msgstr "antarmuka tidak dikenal %s" # OK -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "DBus error: %s" # OK -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "" # OK -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, fuzzy, c-format msgid "started, version %s DNS disabled" msgstr "dimulai, cache versi %s di disable" # OK -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "dimulai, versi %s ukuran cache %d" # OK -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "dimulai, cache versi %s di disable" # OK -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "pilihan-pilihan saat kompilasi: %s" # OK -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "dukungan DBus dimungkinkan: terkoneksi pada bus sistem" # OK -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "dukungan DBus dimungkinkan: koneksi bus ditunda" # OK -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, fuzzy, c-format msgid "warning: failed to change owner of %s: %s" msgstr "gagal memuat nama-nama dari %s: %s" # OK -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "setelan opsi --bind-interfaces disebabkan keterbatasan OS" # OK -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "peringatan: antarmuka %s tidak ada" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" # OK -#: dnsmasq.c:633 +#: dnsmasq.c:634 #, fuzzy msgid "warning: no upstream servers configured" msgstr "menyetel server-server di atas dengan DBus" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "" -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "" # OK -#: dnsmasq.c:669 +#: dnsmasq.c:676 #, fuzzy msgid "enabled" msgstr "di disable" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" # OK -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "terhubung ke sistem DBus" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "" # OK -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, fuzzy, c-format msgid "failed to create helper: %s" msgstr "gagal membaca %s: %s" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, c-format msgid "setting capabilities failed: %s" msgstr "" # OK -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, fuzzy, c-format msgid "failed to change user-id to %s: %s" msgstr "gagal memuat nama-nama dari %s: %s" # OK -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, fuzzy, c-format msgid "failed to change group-id to %s: %s" msgstr "gagal memuat nama-nama dari %s: %s" # OK -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, fuzzy, c-format msgid "failed to open pidfile %s: %s" msgstr "gagal membaca %s: %s" # OK -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, fuzzy, c-format msgid "cannot open log %s: %s" msgstr "tidak bisa membuka %s:%s" # OK -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, fuzzy, c-format msgid "failed to load Lua script: %s" msgstr "gagal memuat %S: %s" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, c-format msgid "script process killed by signal %d" msgstr "" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, c-format msgid "script process exited with status %d" msgstr "" # OK -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, fuzzy, c-format msgid "failed to execute %s: %s" msgstr "gagal mengakses %s: %s" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "keluar karena menerima SIGTERM" # OK -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, fuzzy, c-format msgid "failed to access %s: %s" msgstr "gagal mengakses %s: %s" # OK -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "membaca %s" # OK -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "tidak ditemukan direktif search di %s" # OK -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "tidak bisa membuat socket DHCP: %s" # OK -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "gagal menyetel opsi pada socket DHCP: %s" # OK -#: dhcp.c:77 +#: dhcp.c:89 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "gagal menyetel SO_REUSEADDR pada socket DHCP: %s" # OK -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "gagal mem-bind socket server DHCP: %s" # OK -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "tidak dapat membuat socket ICMP raw: %s" # OK -#: dhcp.c:225 +#: dhcp.c:239 #, fuzzy, c-format msgid "unknown interface %s in bridge-interface" msgstr "antarmuka tidak dikenal %s" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "" # OK -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "jangkauan DHCP %s -- %s tidak konsisten dengan netmask %s" # OK -#: dhcp.c:832 +#: dhcp.c:806 #, fuzzy, c-format msgid "bad line at %s line %d" msgstr "kesalahan nama pada %s baris %d" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + # OK #: lease.c:61 #, fuzzy, c-format @@ -1566,218 +1599,218 @@ msgid "cannot open or create lease file %s: %s" msgstr "tidak dapat membuka atau membuat file lease: %s" # OK -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "terlalu banyak lease yang disimpan" # OK -#: lease.c:164 +#: lease.c:165 #, fuzzy, c-format msgid "cannot run lease-init script %s: %s" msgstr "tidak bisa membaca %s: %s" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "" # OK -#: lease.c:339 +#: lease.c:342 #, fuzzy, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "gagal membaca %s: %s" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "" # OK -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s" # OK -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "dengan pemilih subnet" # OK -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "lewat" # OK -#: rfc2131.c:350 +#: rfc2131.c:351 #, fuzzy, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, c-format msgid "%u available DHCP range: %s -- %s" msgstr "" # OK -#: rfc2131.c:382 -msgid "disabled" -msgstr "di disable" - -# OK -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "diabaikan" - -# OK -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "alamat telah digunakan" - -# OK -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "tak ada alamat yang tersedia" - -# OK -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "jaringan yang salah" - -# OK -#: rfc2131.c:474 -msgid "no address configured" -msgstr "tak ada alamat yang disetel" - -# OK -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "tak ada lease yang tersisa" - -#: rfc2131.c:576 rfc3315.c:428 -#, c-format -msgid "%u client provides name: %s" -msgstr "" - -# OK -#: rfc2131.c:731 +#: rfc2131.c:465 #, fuzzy, c-format msgid "%u vendor class: %s" msgstr "DBus error: %s" # OK -#: rfc2131.c:733 +#: rfc2131.c:467 #, fuzzy, c-format msgid "%u user class: %s" msgstr "DBus error: %s" +# OK +#: rfc2131.c:494 +msgid "disabled" +msgstr "di disable" + +# OK +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "diabaikan" + +# OK +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "alamat telah digunakan" + +# OK +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "tak ada alamat yang tersedia" + +# OK +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "jaringan yang salah" + +# OK +#: rfc2131.c:586 +msgid "no address configured" +msgstr "tak ada alamat yang disetel" + +# OK +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "tak ada lease yang tersisa" + +#: rfc2131.c:687 rfc3315.c:466 +#, c-format +msgid "%u client provides name: %s" +msgstr "" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "" # OK -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "men-disable alamat statik DHCP %s" # OK -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "lease tidak diketahui" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:986 +#: rfc2131.c:994 #, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:989 +#: rfc2131.c:997 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "" # OK -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "alamat salah" # OK -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "lease tak ditemukan" # OK -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "alamat tak tersedia" # OK -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "lease statik tak tersedia" # OK -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "alamat telah dipesan" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "" # OK -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, fuzzy, c-format msgid "%u server name: %s" msgstr "DBus error: %s" # OK -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, fuzzy, c-format msgid "%u next server: %s" msgstr "DBus error: %s" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "" # OK -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, fuzzy, c-format msgid "%u requested options: %s" msgstr "pilihan-pilihan saat kompilasi: %s" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "" @@ -1789,7 +1822,7 @@ msgid "cannot create netlink socket: %s" msgstr "tidak bisa mem-bind netlink socket: %s" # OK -#: netlink.c:354 +#: netlink.c:363 #, fuzzy, c-format msgid "netlink returns error: %s" msgstr "DBus error: %s" @@ -1800,58 +1833,58 @@ msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "mencoba menyetel sebuah alamat IPv6 server lewat DBus - tidak ada dukungan untuk IPv6" # OK -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "menyetel server-server di atas dengan DBus" # OK -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "tidak bisa mendaftar sebuah DBus message handler" # OK -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "tidak dapat membuat socket DHCP BPF: %s" # OK -#: bpf.c:225 +#: bpf.c:273 #, fuzzy, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "permintaan DHCP untuk tipe hardware yang tidak didukung (%d) diterima pada %s" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "" # OK -#: tftp.c:420 +#: tftp.c:433 #, fuzzy, c-format msgid "file %s not found" msgstr "lease tak ditemukan" -#: tftp.c:529 +#: tftp.c:542 #, c-format msgid "error %d %s received from %s" msgstr "" # OK -#: tftp.c:571 +#: tftp.c:584 #, fuzzy, c-format msgid "failed sending %s to %s" msgstr "gagal membaca %s: %s" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "sent %s to %s" msgstr "" @@ -1877,207 +1910,223 @@ msgid "Conntrack connection mark retrieval failed: %s" msgstr "" # OK -#: dhcp6.c:49 +#: dhcp6.c:59 #, fuzzy, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "tidak bisa membuat socket DHCP: %s" # OK -#: dhcp6.c:62 +#: dhcp6.c:80 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "gagal menyetel SO_REUSEADDR pada socket DHCP: %s" # OK -#: dhcp6.c:74 +#: dhcp6.c:92 #, fuzzy, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "gagal mem-bind socket server DHCP: %s" # OK -#: rfc3315.c:135 +#: rfc3315.c:149 #, fuzzy, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s" # OK -#: rfc3315.c:144 +#: rfc3315.c:158 #, fuzzy, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s" # OK -#: rfc3315.c:269 +#: rfc3315.c:289 #, fuzzy, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "tidak ada alamat yang bisa dipakai untuk permintaan DHCP %s %s" # OK -#: rfc3315.c:350 +#: rfc3315.c:370 #, fuzzy, c-format msgid "%u vendor class: %u" msgstr "DBus error: %s" # OK -#: rfc3315.c:609 +#: rfc3315.c:418 +#, fuzzy, c-format +msgid "%u client MAC address: %s" +msgstr "tidak ada antarmuka dengan alamat %s" + +# OK +#: rfc3315.c:650 #, fuzzy, c-format msgid "unknown prefix-class %d" msgstr "lease tidak diketahui" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "" # OK -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 #, fuzzy msgid "no addresses available" msgstr "tak ada alamat yang tersedia" # OK -#: rfc3315.c:806 +#: rfc3315.c:855 #, fuzzy msgid "address unavailable" msgstr "alamat tak tersedia" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "" # OK -#: rfc3315.c:951 +#: rfc3315.c:1006 #, fuzzy msgid "address invalid" msgstr "alamat telah digunakan" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "" # OK -#: rfc3315.c:1003 +#: rfc3315.c:1059 #, fuzzy msgid "all addresses still on link" msgstr "kesalahan nama pada %s baris %d" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "" # OK -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "alamat IP kembar %s (%s) dalam direktif dhcp-config" # OK -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, fuzzy, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "gagal menyetel SO_REUSEADDR pada socket DHCP: %s" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, c-format msgid "Known DHCPv6 options:\n" msgstr "" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr "" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr "" -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "" # OK -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, fuzzy, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "DHCP, lease static pada %.0s%s, waktu lease %s" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "" # OK -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, fuzzy, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "DHCP, jangkaun IP %s -- %s, waktu lease %s" -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "" # OK -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, fuzzy, c-format msgid "router advertisement on %s%s" msgstr "DHCP, lease static pada %.0s%s, waktu lease %s" +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + # OK -#: radv.c:87 +#: radv.c:93 #, fuzzy, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "tidak bisa membuat socket DHCP: %s" -#: auth.c:402 +#: auth.c:435 #, c-format msgid "ignoring zone transfer request from %s" msgstr "" # OK -#: ipset.c:71 +#: ipset.c:95 #, fuzzy, c-format msgid "failed to find kernel version: %s" msgstr "gagal mem-bind socket server DHCP: %s" # OK -#: ipset.c:90 +#: ipset.c:114 #, fuzzy, c-format msgid "failed to create IPset control socket: %s" msgstr "gagal membuat socket: %s " -# OK -#~ msgid "no interface with address %s" -#~ msgstr "tidak ada antarmuka dengan alamat %s" - # OK #~ msgid "duplicate IP address %s in dhcp-config directive." #~ msgstr "alamat IP kembar %s dalam direktif dhcp-config" diff --git a/po/it.po b/po/it.po index 9d414f8..1df5052 100644 --- a/po/it.po +++ b/po/it.po @@ -21,17 +21,17 @@ msgstr "" msgid "failed to load names from %s: %s" msgstr "" -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, c-format msgid "bad address at %s line %d" msgstr "" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "" @@ -40,37 +40,37 @@ msgstr "" msgid "cleared cache" msgstr "" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "" -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "" -#: cache.c:1163 +#: cache.c:1131 #, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "" -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "" @@ -80,893 +80,913 @@ msgstr "" msgid "failed to seed the random number generator: %s" msgstr "" -#: util.c:189 +#: util.c:192 msgid "failed to allocate memory" msgstr "" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "" -#: util.c:237 +#: util.c:240 #, c-format msgid "cannot create pipe: %s" msgstr "" -#: util.c:245 +#: util.c:248 #, c-format msgid "failed to allocate %d bytes" msgstr "" -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "" -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "" -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "" -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "" -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "" -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "" -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "" -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "" -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "" -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "" -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "" -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "" -#: option.c:297 -msgid "Enable DHCP in the range given with lease duration." -msgstr "" - -#: option.c:298 -#, c-format -msgid "Change to this group after startup (defaults to %s)." -msgstr "" - -#: option.c:299 -msgid "Set address or hostname for a specified machine." -msgstr "" - -#: option.c:300 -msgid "Read DHCP host specs from file." -msgstr "" - -#: option.c:301 -msgid "Read DHCP option specs from file." -msgstr "" - -#: option.c:302 -msgid "Evaluate conditional tag expression." -msgstr "" - #: option.c:303 -#, c-format -msgid "Do NOT load %s file." +msgid "Enable DHCP in the range given with lease duration." msgstr "" #: option.c:304 #, c-format -msgid "Specify a hosts file to be read in addition to %s." +msgid "Change to this group after startup (defaults to %s)." msgstr "" #: option.c:305 -msgid "Specify interface(s) to listen on." +msgid "Set address or hostname for a specified machine." msgstr "" #: option.c:306 -msgid "Specify interface(s) NOT to listen on." +msgid "Read DHCP host specs from file." msgstr "" #: option.c:307 -msgid "Map DHCP user class to tag." +msgid "Read DHCP option specs from file." msgstr "" #: option.c:308 -msgid "Map RFC3046 circuit-id to tag." +msgid "Evaluate conditional tag expression." msgstr "" #: option.c:309 -msgid "Map RFC3046 remote-id to tag." +#, c-format +msgid "Do NOT load %s file." msgstr "" #: option.c:310 -msgid "Map RFC3993 subscriber-id to tag." +#, c-format +msgid "Specify a hosts file to be read in addition to %s." msgstr "" #: option.c:311 -msgid "Don't do DHCP for hosts with tag set." +msgid "Specify interface(s) to listen on." msgstr "" #: option.c:312 -msgid "Force broadcast replies for hosts with tag set." +msgid "Specify interface(s) NOT to listen on." msgstr "" #: option.c:313 -msgid "Do NOT fork into the background, do NOT run in debug mode." +msgid "Map DHCP user class to tag." msgstr "" #: option.c:314 -msgid "Assume we are the only DHCP server on the local network." +msgid "Map RFC3046 circuit-id to tag." msgstr "" #: option.c:315 -#, c-format -msgid "Specify where to store DHCP leases (defaults to %s)." +msgid "Map RFC3046 remote-id to tag." msgstr "" #: option.c:316 -msgid "Return MX records for local hosts." +msgid "Map RFC3993 subscriber-id to tag." msgstr "" #: option.c:317 -msgid "Specify an MX record." +msgid "Don't do DHCP for hosts with tag set." msgstr "" #: option.c:318 -msgid "Specify BOOTP options to DHCP server." +msgid "Force broadcast replies for hosts with tag set." msgstr "" #: option.c:319 -#, c-format -msgid "Do NOT poll %s file, reload only on SIGHUP." +msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "" #: option.c:320 -msgid "Do NOT cache failed search results." +msgid "Assume we are the only DHCP server on the local network." msgstr "" #: option.c:321 #, c-format -msgid "Use nameservers strictly in the order given in %s." +msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "" #: option.c:322 -msgid "Specify options to be sent to DHCP clients." +msgid "Return MX records for local hosts." msgstr "" #: option.c:323 -msgid "DHCP option sent even if the client does not request it." +msgid "Specify an MX record." msgstr "" #: option.c:324 -msgid "Specify port to listen for DNS requests on (defaults to 53)." +msgid "Specify BOOTP options to DHCP server." msgstr "" #: option.c:325 #, c-format -msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." +msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "" #: option.c:326 -msgid "Log DNS queries." +msgid "Do NOT cache failed search results." msgstr "" #: option.c:327 -msgid "Force the originating port for upstream DNS queries." +#, c-format +msgid "Use nameservers strictly in the order given in %s." msgstr "" #: option.c:328 -msgid "Do NOT read resolv.conf." +msgid "Specify options to be sent to DHCP clients." msgstr "" #: option.c:329 +msgid "DHCP option sent even if the client does not request it." +msgstr "" + +#: option.c:330 +msgid "Specify port to listen for DNS requests on (defaults to 53)." +msgstr "" + +#: option.c:331 +#, c-format +msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." +msgstr "" + +#: option.c:332 +msgid "Log DNS queries." +msgstr "" + +#: option.c:333 +msgid "Force the originating port for upstream DNS queries." +msgstr "" + +#: option.c:334 +msgid "Do NOT read resolv.conf." +msgstr "" + +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "" -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "" -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "" -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "" -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "" -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "" -#: option.c:335 +#: option.c:341 msgid "Specify time-to-live in seconds for negative caching." msgstr "" -#: option.c:336 -msgid "Specify time-to-live in seconds for maximum TTL to send to clients." -msgstr "" - -#: option.c:337 -#, c-format -msgid "Change to this user after startup. (defaults to %s)." -msgstr "" - -#: option.c:338 -msgid "Map DHCP vendor class to tag." -msgstr "" - -#: option.c:339 -msgid "Display dnsmasq version and copyright information." -msgstr "" - -#: option.c:340 -msgid "Translate IPv4 addresses from upstream servers." -msgstr "" - -#: option.c:341 -msgid "Specify a SRV record." -msgstr "" - #: option.c:342 -msgid "Display this message. Use --help dhcp for known DHCP options." +msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "" #: option.c:343 #, c-format -msgid "Specify path of PID file (defaults to %s)." +msgid "Change to this user after startup. (defaults to %s)." msgstr "" #: option.c:344 -#, c-format -msgid "Specify maximum number of DHCP leases (defaults to %s)." +msgid "Map DHCP vendor class to tag." msgstr "" #: option.c:345 -msgid "Answer DNS queries based on the interface a query was sent to." +msgid "Display dnsmasq version and copyright information." msgstr "" #: option.c:346 -msgid "Specify TXT DNS record." +msgid "Translate IPv4 addresses from upstream servers." msgstr "" #: option.c:347 -msgid "Specify PTR DNS record." +msgid "Specify a SRV record." msgstr "" #: option.c:348 -msgid "Give DNS name to IPv4 address of interface." +msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "" #: option.c:349 -msgid "Bind only to interfaces in use." +#, c-format +msgid "Specify path of PID file (defaults to %s)." msgstr "" #: option.c:350 #, c-format -msgid "Read DHCP static host information from %s." +msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "" #: option.c:351 -msgid "Enable the DBus interface for setting upstream servers, etc." +msgid "Answer DNS queries based on the interface a query was sent to." msgstr "" #: option.c:352 -msgid "Do not provide DHCP on this interface, only provide DNS." +msgid "Specify TXT DNS record." msgstr "" #: option.c:353 -msgid "Enable dynamic address allocation for bootp." +msgid "Specify PTR DNS record." msgstr "" #: option.c:354 -msgid "Map MAC address (with wildcards) to option set." +msgid "Give DNS name to IPv4 address of interface." msgstr "" #: option.c:355 -msgid "Treat DHCP requests on aliases as arriving from interface." +msgid "Bind only to interfaces in use." msgstr "" #: option.c:356 -msgid "Disable ICMP echo address checking in the DHCP server." +#, c-format +msgid "Read DHCP static host information from %s." msgstr "" #: option.c:357 -msgid "Shell script to run on DHCP lease creation and destruction." +msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "" #: option.c:358 -msgid "Lua script to run on DHCP lease creation and destruction." +msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "" #: option.c:359 -msgid "Run lease-change scripts as this user." +msgid "Enable dynamic address allocation for bootp." msgstr "" #: option.c:360 -msgid "Read configuration from all the files in this directory." +msgid "Map MAC address (with wildcards) to option set." msgstr "" #: option.c:361 -msgid "Log to this syslog facility or file. (defaults to DAEMON)" +msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "" #: option.c:362 -msgid "Do not use leasefile." +msgid "Disable ICMP echo address checking in the DHCP server." msgstr "" #: option.c:363 +msgid "Shell script to run on DHCP lease creation and destruction." +msgstr "" + +#: option.c:364 +msgid "Lua script to run on DHCP lease creation and destruction." +msgstr "" + +#: option.c:365 +msgid "Run lease-change scripts as this user." +msgstr "" + +#: option.c:366 +msgid "Read configuration from all the files in this directory." +msgstr "" + +#: option.c:367 +msgid "Log to this syslog facility or file. (defaults to DAEMON)" +msgstr "" + +#: option.c:368 +msgid "Do not use leasefile." +msgstr "" + +#: option.c:369 #, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "" -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "" -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "" -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "" -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "" -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "" -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "" -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "" -#: option.c:371 +#: option.c:377 #, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "" -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "" -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "" -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "" -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "" -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "" -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "" -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "" -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "" -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "" -#: option.c:382 +#: option.c:388 msgid "Use alternative ports for DHCP." msgstr "" -#: option.c:383 +#: option.c:389 msgid "Specify NAPTR DNS record." msgstr "" -#: option.c:384 +#: option.c:390 msgid "Specify lowest port available for DNS query transmission." msgstr "" -#: option.c:385 +#: option.c:391 msgid "Use only fully qualified domain names for DHCP clients." msgstr "" -#: option.c:386 +#: option.c:392 msgid "Generate hostnames based on MAC address for nameless clients." msgstr "" -#: option.c:387 +#: option.c:393 msgid "Use these DHCP relays as full proxies." msgstr "" -#: option.c:388 -msgid "Specify alias name for LOCAL DNS name." -msgstr "" - -#: option.c:389 -msgid "Prompt to send to PXE clients." -msgstr "" - -#: option.c:390 -msgid "Boot service for PXE menu." -msgstr "" - -#: option.c:391 -msgid "Check configuration syntax." -msgstr "" - -#: option.c:392 -msgid "Add requestor's MAC address to forwarded DNS queries." -msgstr "" - -#: option.c:393 -msgid "Proxy DNSSEC validation results from upstream nameservers." -msgstr "" - #: option.c:394 -msgid "Attempt to allocate sequential IP addresses to DHCP clients." +msgid "Relay DHCP requests to a remote server" msgstr "" #: option.c:395 -msgid "Copy connection-track mark from queries to upstream connections." +msgid "Specify alias name for LOCAL DNS name." msgstr "" #: option.c:396 -msgid "Allow DHCP clients to do their own DDNS updates." +msgid "Prompt to send to PXE clients." msgstr "" #: option.c:397 -msgid "Send router-advertisements for interfaces doing DHCPv6" +msgid "Boot service for PXE menu." msgstr "" #: option.c:398 -msgid "Specify DUID_EN-type DHCPv6 server DUID" +msgid "Check configuration syntax." msgstr "" #: option.c:399 -msgid "Specify host (A/AAAA and PTR) records" +msgid "Add requestor's MAC address to forwarded DNS queries." msgstr "" #: option.c:400 -msgid "Specify arbitrary DNS resource record" +msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "" #: option.c:401 -msgid "Bind to interfaces in use - check for new interfaces" +msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "" #: option.c:402 -msgid "Export local names to global DNS" +msgid "Copy connection-track mark from queries to upstream connections." msgstr "" #: option.c:403 -msgid "Domain to export to global DNS" +msgid "Allow DHCP clients to do their own DDNS updates." msgstr "" #: option.c:404 -msgid "Set TTL for authoritative replies" +msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "" #: option.c:405 -msgid "Set authoritive zone information" +msgid "Always send frequent router-advertisements" msgstr "" #: option.c:406 -msgid "Secondary authoritative nameservers for forward domains" +msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "" #: option.c:407 -msgid "Peers which are allowed to do zone transfer" +msgid "Specify host (A/AAAA and PTR) records" msgstr "" #: option.c:408 -msgid "Specify ipsets to which matching domains should be added" +msgid "Specify arbitrary DNS resource record" +msgstr "" + +#: option.c:409 +msgid "Bind to interfaces in use - check for new interfaces" msgstr "" #: option.c:410 +msgid "Export local names to global DNS" +msgstr "" + +#: option.c:411 +msgid "Domain to export to global DNS" +msgstr "" + +#: option.c:412 +msgid "Set TTL for authoritative replies" +msgstr "" + +#: option.c:413 +msgid "Set authoritive zone information" +msgstr "" + +#: option.c:414 +msgid "Secondary authoritative nameservers for forward domains" +msgstr "" + +#: option.c:415 +msgid "Peers which are allowed to do zone transfer" +msgstr "" + +#: option.c:416 +msgid "Specify ipsets to which matching domains should be added" +msgstr "" + +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "" -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" "\n" msgstr "" -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "" -#: option.c:600 +#: option.c:609 #, c-format msgid "Valid options are:\n" msgstr "" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "" -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 msgid "bad interface name" msgstr "" -#: option.c:720 +#: option.c:729 msgid "bad address" msgstr "" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "" -#: option.c:929 +#: option.c:945 msgid "bad IP address" msgstr "" -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 msgid "bad IPv6 address" msgstr "" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "" -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, c-format msgid "cannot access directory %s: %s" msgstr "" -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, c-format msgid "cannot access %s: %s" msgstr "" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "" -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "" -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "" -#: option.c:1521 +#: option.c:1537 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "" -#: option.c:1631 +#: option.c:1739 option.c:1800 msgid "bad prefix" msgstr "" -#: option.c:2043 +#: option.c:2094 msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "" -#: option.c:2223 +#: option.c:2274 msgid "bad port range" msgstr "" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "" -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "" -#: option.c:2402 -msgid "prefix must be exactly 64 for RA subnets" +#: option.c:2459 +msgid "prefix length must be exactly 64 for RA subnets" msgstr "" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" +#: option.c:2461 +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "" -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2465 +msgid "prefix length must be at least 64" msgstr "" -#: option.c:2412 +#: option.c:2468 msgid "inconsistent DHCPv6 range" msgstr "" -#: option.c:2519 option.c:2567 +#: option.c:2479 +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "" + +#: option.c:2590 option.c:2638 msgid "bad hex constant" msgstr "" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "" -#: option.c:2589 +#: option.c:2660 #, c-format msgid "duplicate dhcp-host IP address %s" msgstr "" -#: option.c:2645 +#: option.c:2716 msgid "bad DHCP host name" msgstr "" -#: option.c:2727 +#: option.c:2798 msgid "bad tag-if" msgstr "" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "" -#: option.c:3113 +#: option.c:3184 msgid "bad dhcp-proxy address" msgstr "" -#: option.c:3124 +#: option.c:3210 +msgid "Bad dhcp-relay" +msgstr "" + +#: option.c:3220 msgid "bad DUID" msgstr "" -#: option.c:3166 +#: option.c:3262 msgid "invalid alias range" msgstr "" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "" -#: option.c:3230 +#: option.c:3330 msgid "bad PTR record" msgstr "" -#: option.c:3261 +#: option.c:3361 msgid "bad NAPTR record" msgstr "" -#: option.c:3295 +#: option.c:3395 msgid "bad RR record" msgstr "" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "" -#: option.c:3417 +#: option.c:3517 msgid "Bad host-record" msgstr "" -#: option.c:3434 +#: option.c:3534 msgid "Bad name in host-record" msgstr "" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "" -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "" -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "" -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "" -#: option.c:3592 +#: option.c:3692 #, c-format msgid " at line %d of %s" msgstr "" -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "" -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, c-format msgid "read %s" msgstr "" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "" -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "" -#: option.c:3951 +#: option.c:4051 #, c-format msgid "" "Compile time options: %s\n" "\n" msgstr "" -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "" -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "" -#: option.c:3954 +#: option.c:4054 #, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "" -#: option.c:3969 +#: option.c:4069 #, c-format msgid "bad command line options: %s" msgstr "" -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "" -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "" -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "" -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, c-format msgid "failed to read %s: %s" msgstr "" -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "" @@ -985,101 +1005,106 @@ msgstr "" msgid "possible DNS-rebind attack detected: %s" msgstr "" -#: network.c:414 +#: forward.c:1216 +#, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "" + +#: network.c:551 #, c-format msgid "failed to create listening socket for %s: %s" msgstr "" -#: network.c:743 +#: network.c:882 #, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "" -#: network.c:937 +#: network.c:1076 #, c-format msgid "failed to bind server socket for %s: %s" msgstr "" -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "" -#: network.c:985 +#: network.c:1124 #, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "" -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "" -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "" -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "" -#: network.c:1011 +#: network.c:1150 #, c-format msgid "using standard nameservers for %s %s" msgstr "" -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "" -#: network.c:1016 +#: network.c:1155 #, c-format msgid "using nameserver %s#%d(via %s)" msgstr "" -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "" -#: dnsmasq.c:131 +#: dnsmasq.c:134 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "" -#: dnsmasq.c:139 +#: dnsmasq.c:142 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "" -#: dnsmasq.c:144 +#: dnsmasq.c:147 msgid "asychronous logging is not available under Solaris" msgstr "" -#: dnsmasq.c:149 +#: dnsmasq.c:152 msgid "asychronous logging is not available under Android" msgstr "" -#: dnsmasq.c:154 +#: dnsmasq.c:157 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "" @@ -1097,426 +1122,431 @@ msgstr "" msgid "unknown interface %s" msgstr "" -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "" -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, c-format msgid "started, version %s DNS disabled" msgstr "" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "" -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "" -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, c-format msgid "warning: failed to change owner of %s: %s" msgstr "" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "" -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:633 +#: dnsmasq.c:634 msgid "warning: no upstream servers configured" msgstr "" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "" -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "enabled" msgstr "" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, c-format msgid "failed to create helper: %s" msgstr "" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, c-format msgid "setting capabilities failed: %s" msgstr "" -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, c-format msgid "failed to change user-id to %s: %s" msgstr "" -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, c-format msgid "failed to change group-id to %s: %s" msgstr "" -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, c-format msgid "failed to open pidfile %s: %s" msgstr "" -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, c-format msgid "cannot open log %s: %s" msgstr "" -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, c-format msgid "failed to load Lua script: %s" msgstr "" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, c-format msgid "script process killed by signal %d" msgstr "" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, c-format msgid "script process exited with status %d" msgstr "" -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, c-format msgid "failed to execute %s: %s" msgstr "" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, c-format msgid "failed to access %s: %s" msgstr "" -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "" -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, c-format msgid "no servers found in %s, will retry" msgstr "" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "" -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "" -#: dhcp.c:77 +#: dhcp.c:89 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "" -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "" -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "" -#: dhcp.c:225 +#: dhcp.c:239 #, c-format msgid "unknown interface %s in bridge-interface" msgstr "" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "" -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "" -#: dhcp.c:832 +#: dhcp.c:806 #, c-format msgid "bad line at %s line %d" msgstr "" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + #: lease.c:61 #, c-format msgid "cannot open or create lease file %s: %s" msgstr "" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "" -#: lease.c:164 +#: lease.c:165 #, c-format msgid "cannot run lease-init script %s: %s" msgstr "" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "" -#: lease.c:339 +#: lease.c:342 #, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "" -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "" -#: rfc2131.c:350 +#: rfc2131.c:351 #, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, c-format msgid "%u available DHCP range: %s -- %s" msgstr "" -#: rfc2131.c:382 -msgid "disabled" -msgstr "" - -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "" - -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "" - -#: rfc2131.c:576 rfc3315.c:428 -#, c-format -msgid "%u client provides name: %s" -msgstr "" - -#: rfc2131.c:731 +#: rfc2131.c:465 #, c-format msgid "%u vendor class: %s" msgstr "" -#: rfc2131.c:733 +#: rfc2131.c:467 #, c-format msgid "%u user class: %s" msgstr "" +#: rfc2131.c:494 +msgid "disabled" +msgstr "" + +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "" + +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "" + +#: rfc2131.c:687 rfc3315.c:466 +#, c-format +msgid "%u client provides name: %s" +msgstr "" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "" -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "" -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:986 +#: rfc2131.c:994 #, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:989 +#: rfc2131.c:997 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "" -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "" -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "" -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "" -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, c-format msgid "%u server name: %s" msgstr "" -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, c-format msgid "%u next server: %s" msgstr "" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "" -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, c-format msgid "%u requested options: %s" msgstr "" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "" @@ -1526,7 +1556,7 @@ msgstr "" msgid "cannot create netlink socket: %s" msgstr "" -#: netlink.c:354 +#: netlink.c:363 #, c-format msgid "netlink returns error: %s" msgstr "" @@ -1535,53 +1565,53 @@ msgstr "" msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "" -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "" -#: bpf.c:225 +#: bpf.c:273 #, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "" -#: tftp.c:420 +#: tftp.c:433 #, c-format msgid "file %s not found" msgstr "" -#: tftp.c:529 +#: tftp.c:542 #, c-format msgid "error %d %s received from %s" msgstr "" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "failed sending %s to %s" msgstr "" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "sent %s to %s" msgstr "" @@ -1605,176 +1635,195 @@ msgstr "" msgid "Conntrack connection mark retrieval failed: %s" msgstr "" -#: dhcp6.c:49 +#: dhcp6.c:59 #, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "" -#: dhcp6.c:62 +#: dhcp6.c:80 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "" -#: dhcp6.c:74 +#: dhcp6.c:92 #, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "" -#: rfc3315.c:135 +#: rfc3315.c:149 #, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "" -#: rfc3315.c:144 +#: rfc3315.c:158 #, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "" -#: rfc3315.c:269 +#: rfc3315.c:289 #, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "" -#: rfc3315.c:350 +#: rfc3315.c:370 #, c-format msgid "%u vendor class: %u" msgstr "" -#: rfc3315.c:609 +#: rfc3315.c:418 +#, c-format +msgid "%u client MAC address: %s" +msgstr "" + +#: rfc3315.c:650 #, c-format msgid "unknown prefix-class %d" msgstr "" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "" -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 msgid "no addresses available" msgstr "" -#: rfc3315.c:806 +#: rfc3315.c:855 msgid "address unavailable" msgstr "" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "" -#: rfc3315.c:951 +#: rfc3315.c:1006 msgid "address invalid" msgstr "" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "" -#: rfc3315.c:1003 +#: rfc3315.c:1059 msgid "all addresses still on link" msgstr "" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "" -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "" -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, c-format msgid "Known DHCPv6 options:\n" msgstr "" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr "" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr "" -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "" -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "" -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "" -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "" -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, c-format msgid "router advertisement on %s%s" msgstr "" -#: radv.c:87 +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + +#: radv.c:93 #, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "" -#: auth.c:402 +#: auth.c:435 #, c-format msgid "ignoring zone transfer request from %s" msgstr "" -#: ipset.c:71 +#: ipset.c:95 #, c-format msgid "failed to find kernel version: %s" msgstr "" -#: ipset.c:90 +#: ipset.c:114 #, c-format msgid "failed to create IPset control socket: %s" msgstr "" diff --git a/po/no.po b/po/no.po index 34164c5..b721a53 100644 --- a/po/no.po +++ b/po/no.po @@ -23,17 +23,17 @@ msgstr "" msgid "failed to load names from %s: %s" msgstr "feilet å laste navn fra %s: %s" -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, c-format msgid "bad address at %s line %d" msgstr "dårlig adresse ved %s linje %d" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "dårlig navn ved %s linje %d" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "les %s - %d adresser" @@ -42,37 +42,37 @@ msgstr "les %s - %d adresser" msgid "cleared cache" msgstr "mellomlager tømt" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "" -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "gir ikke navnet %s til DHCP leien for %s fordi navnet eksisterer i %s med adressen %s" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "" -#: cache.c:1163 +#: cache.c:1131 #, fuzzy, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "mellomlager størrelse %d, %d/%d mellomlager innsettinger re-bruker mellomlager plasser som ikke er utløpt" -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "" @@ -82,563 +82,575 @@ msgstr "" msgid "failed to seed the random number generator: %s" msgstr "feilet å lytte på socket: %s" -#: util.c:189 +#: util.c:192 #, fuzzy msgid "failed to allocate memory" msgstr "feilet å laste %d bytes" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "kunne ikke få minne" -#: util.c:237 +#: util.c:240 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "kan ikke lese %s: %s" -#: util.c:245 +#: util.c:248 #, fuzzy, c-format msgid "failed to allocate %d bytes" msgstr "feilet å laste %d bytes" -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "uendelig" -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "Spesifiser lokal(e) adresse(r) å lytte på." -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "Returner ipaddr for alle verter i det spesifiserte domenet." -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "Forfalsk revers oppslag for RFC1918 private adresse områder." -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "Behandle ipaddr som NXDOMAIN (omgår Verisign wildcard)." -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "Spesifiser størrelsen på mellomlager plassene (standard er %s)." -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "Spesifiser konfigurasjonsfil (standard er %s)." -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "IKKE legg (fork) som bakgrunnsprosess: kjør i debug modus." -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "IKKE videresend oppslag som mangler domene del." -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "Returner selv-pekende MX post for lokale verter." -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "Utvid enkle navn i /etc/hosts med domene-suffiks." -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "Ikke videresend falske/uekte DNS forespørsler fra Windows verter." -#: option.c:297 +#: option.c:303 msgid "Enable DHCP in the range given with lease duration." msgstr "Aktiver DHCP i det gitte området med leie varighet" -#: option.c:298 +#: option.c:304 #, c-format msgid "Change to this group after startup (defaults to %s)." msgstr "Skift til denne gruppen etter oppstart (standard er %s)." -#: option.c:299 +#: option.c:305 msgid "Set address or hostname for a specified machine." msgstr "Sett adresse eller vertsnavn for en spesifikk maskin." -#: option.c:300 +#: option.c:306 #, fuzzy msgid "Read DHCP host specs from file." msgstr "dårlig MX navn" -#: option.c:301 +#: option.c:307 msgid "Read DHCP option specs from file." msgstr "" -#: option.c:302 +#: option.c:308 msgid "Evaluate conditional tag expression." msgstr "" -#: option.c:303 +#: option.c:309 #, c-format msgid "Do NOT load %s file." msgstr "IKKE last %s filen." -#: option.c:304 +#: option.c:310 #, c-format msgid "Specify a hosts file to be read in addition to %s." msgstr "Spesifiser en verts (hosts) fil som skal leses i tilleg til %s." -#: option.c:305 +#: option.c:311 msgid "Specify interface(s) to listen on." msgstr "Spesifiser nettverkskort det skal lyttes på." -#: option.c:306 +#: option.c:312 msgid "Specify interface(s) NOT to listen on." msgstr "Spesifiser nettverkskort det IKKE skal lyttes på." -#: option.c:307 +#: option.c:313 #, fuzzy msgid "Map DHCP user class to tag." msgstr "Map DHCP bruker klasse til opsjon sett." -#: option.c:308 +#: option.c:314 msgid "Map RFC3046 circuit-id to tag." msgstr "" -#: option.c:309 +#: option.c:315 msgid "Map RFC3046 remote-id to tag." msgstr "" -#: option.c:310 +#: option.c:316 msgid "Map RFC3993 subscriber-id to tag." msgstr "" -#: option.c:311 +#: option.c:317 #, fuzzy msgid "Don't do DHCP for hosts with tag set." msgstr "Ikke utfør DHCP for klienter i opsjon sett." -#: option.c:312 +#: option.c:318 #, fuzzy msgid "Force broadcast replies for hosts with tag set." msgstr "Ikke utfør DHCP for klienter i opsjon sett." -#: option.c:313 +#: option.c:319 msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "IKKE last (fork) som bakgrunnsprosess, IKKE kjør i debug modus." -#: option.c:314 +#: option.c:320 msgid "Assume we are the only DHCP server on the local network." msgstr "Anta at vi er den eneste DHCP tjeneren på det lokale nettverket." -#: option.c:315 +#: option.c:321 #, c-format msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "Spesifiser hvor DHCP leiene skal lagres (standard er %s)." -#: option.c:316 +#: option.c:322 msgid "Return MX records for local hosts." msgstr "Returner MX records for lokale verter." -#: option.c:317 +#: option.c:323 msgid "Specify an MX record." msgstr "Spesifiser en MX post." -#: option.c:318 +#: option.c:324 msgid "Specify BOOTP options to DHCP server." msgstr "Spesifiser BOOTP opsjoner til DHCP tjener." -#: option.c:319 +#: option.c:325 #, c-format msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "IKKE spør (poll) %s fil, les på nytt kun ved SIGHUP" -#: option.c:320 +#: option.c:326 msgid "Do NOT cache failed search results." msgstr "IKKE mellomlagre søkeresultater som feiler." -#: option.c:321 +#: option.c:327 #, c-format msgid "Use nameservers strictly in the order given in %s." msgstr "Bruk navnetjenere kun som bestemt i rekkefølgen gitt i %s." -#: option.c:322 +#: option.c:328 #, fuzzy msgid "Specify options to be sent to DHCP clients." msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene." -#: option.c:323 +#: option.c:329 msgid "DHCP option sent even if the client does not request it." msgstr "" -#: option.c:324 +#: option.c:330 msgid "Specify port to listen for DNS requests on (defaults to 53)." msgstr "Spesifiser lytteport for DNS oppslag (standard er 53)." -#: option.c:325 +#: option.c:331 #, c-format msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." msgstr "Maksimal støttet UDP pakkestørrelse for EDNS.0 (standard er %s)." -#: option.c:326 +#: option.c:332 #, fuzzy msgid "Log DNS queries." msgstr "Logg oppslag." -#: option.c:327 +#: option.c:333 #, fuzzy msgid "Force the originating port for upstream DNS queries." msgstr "Tving bruk av opprinnelig port for oppstrøms oppslag." -#: option.c:328 +#: option.c:334 msgid "Do NOT read resolv.conf." msgstr "IKKE les resolv.conf." -#: option.c:329 +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "Spesifiser stien til resolv.conf (standard er %s)." -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "Spesifiser adressen(e) til oppstrøms tjenere med valgfrie domener." -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "Aldri videresend oppslag til spesifiserte domener." -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "Spesifiser domenet som skal tildeles i DHCP leien." -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "Spesifiser default mål i en MX post." -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts." -#: option.c:335 +#: option.c:341 #, fuzzy msgid "Specify time-to-live in seconds for negative caching." msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts." -#: option.c:336 +#: option.c:342 #, fuzzy msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "Spesifiser time-to-live i sekunder for svar fra /etc/hosts." -#: option.c:337 +#: option.c:343 #, c-format msgid "Change to this user after startup. (defaults to %s)." msgstr "Skift til denne bruker etter oppstart (standard er %s)." -#: option.c:338 +#: option.c:344 #, fuzzy msgid "Map DHCP vendor class to tag." msgstr "Map DHCP produsent klasse til opsjon sett." -#: option.c:339 +#: option.c:345 msgid "Display dnsmasq version and copyright information." msgstr "Vis dnsmasq versjon og copyright informasjon." -#: option.c:340 +#: option.c:346 msgid "Translate IPv4 addresses from upstream servers." msgstr "Oversett IPv4 adresser fra oppstrøms tjenere." -#: option.c:341 +#: option.c:347 msgid "Specify a SRV record." msgstr "Spesifiser en SRV post." -#: option.c:342 +#: option.c:348 msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "" -#: option.c:343 +#: option.c:349 #, fuzzy, c-format msgid "Specify path of PID file (defaults to %s)." msgstr "Spesifiser stien til PID fil. (standard er %s)." -#: option.c:344 +#: option.c:350 #, c-format msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)" -#: option.c:345 +#: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." msgstr "Svar DNS oppslag basert på nettverkskortet oppslaget ble sendt til." -#: option.c:346 +#: option.c:352 msgid "Specify TXT DNS record." msgstr "Spesifiser TXT DNS post." -#: option.c:347 +#: option.c:353 #, fuzzy msgid "Specify PTR DNS record." msgstr "Spesifiser TXT DNS post." -#: option.c:348 +#: option.c:354 msgid "Give DNS name to IPv4 address of interface." msgstr "" -#: option.c:349 +#: option.c:355 msgid "Bind only to interfaces in use." msgstr "Bind kun til nettverkskort som er i bruk." -#: option.c:350 +#: option.c:356 #, c-format msgid "Read DHCP static host information from %s." msgstr "Les DHCP statisk vert informasjon fra %s." -#: option.c:351 +#: option.c:357 msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "Aktiver DBus interface for å sette oppstrøms tjenere, osv." -#: option.c:352 +#: option.c:358 msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "Ikke lever DHCP på dette nettverkskortet, kun lever DNS." -#: option.c:353 +#: option.c:359 msgid "Enable dynamic address allocation for bootp." msgstr "Aktiver dynamisk adresse allokering for bootp." -#: option.c:354 +#: option.c:360 #, fuzzy msgid "Map MAC address (with wildcards) to option set." msgstr "Map DHCP produsent klasse til opsjon sett." -#: option.c:355 +#: option.c:361 msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "" -#: option.c:356 +#: option.c:362 msgid "Disable ICMP echo address checking in the DHCP server." msgstr "" -#: option.c:357 +#: option.c:363 msgid "Shell script to run on DHCP lease creation and destruction." msgstr "" -#: option.c:358 +#: option.c:364 msgid "Lua script to run on DHCP lease creation and destruction." msgstr "" -#: option.c:359 +#: option.c:365 msgid "Run lease-change scripts as this user." msgstr "" -#: option.c:360 +#: option.c:366 msgid "Read configuration from all the files in this directory." msgstr "" -#: option.c:361 +#: option.c:367 #, fuzzy msgid "Log to this syslog facility or file. (defaults to DAEMON)" msgstr "Skift til denne bruker etter oppstart (standard er %s)." -#: option.c:362 +#: option.c:368 msgid "Do not use leasefile." msgstr "" -#: option.c:363 +#: option.c:369 #, fuzzy, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)" -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "" -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "" -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "" -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "" -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "" -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "" -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "" -#: option.c:371 +#: option.c:377 #, fuzzy, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)" -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "" -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "" -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "" -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "" -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "" -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "" -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "" -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "" -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "" -#: option.c:382 -msgid "Use alternative ports for DHCP." -msgstr "" - -#: option.c:383 -#, fuzzy -msgid "Specify NAPTR DNS record." -msgstr "Spesifiser TXT DNS post." - -#: option.c:384 -msgid "Specify lowest port available for DNS query transmission." -msgstr "" - -#: option.c:385 -msgid "Use only fully qualified domain names for DHCP clients." -msgstr "" - -#: option.c:386 -msgid "Generate hostnames based on MAC address for nameless clients." -msgstr "" - -#: option.c:387 -msgid "Use these DHCP relays as full proxies." -msgstr "" - #: option.c:388 -msgid "Specify alias name for LOCAL DNS name." +msgid "Use alternative ports for DHCP." msgstr "" #: option.c:389 #, fuzzy -msgid "Prompt to send to PXE clients." -msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene." +msgid "Specify NAPTR DNS record." +msgstr "Spesifiser TXT DNS post." #: option.c:390 -msgid "Boot service for PXE menu." +msgid "Specify lowest port available for DNS query transmission." msgstr "" #: option.c:391 -msgid "Check configuration syntax." +msgid "Use only fully qualified domain names for DHCP clients." msgstr "" #: option.c:392 -msgid "Add requestor's MAC address to forwarded DNS queries." +msgid "Generate hostnames based on MAC address for nameless clients." msgstr "" #: option.c:393 +msgid "Use these DHCP relays as full proxies." +msgstr "" + +#: option.c:394 +msgid "Relay DHCP requests to a remote server" +msgstr "" + +#: option.c:395 +msgid "Specify alias name for LOCAL DNS name." +msgstr "" + +#: option.c:396 +#, fuzzy +msgid "Prompt to send to PXE clients." +msgstr "Sett ekstra opsjoner som skal fordeles til DHCP klientene." + +#: option.c:397 +msgid "Boot service for PXE menu." +msgstr "" + +#: option.c:398 +msgid "Check configuration syntax." +msgstr "" + +#: option.c:399 +msgid "Add requestor's MAC address to forwarded DNS queries." +msgstr "" + +#: option.c:400 #, fuzzy msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "Oversett IPv4 adresser fra oppstrøms tjenere." -#: option.c:394 +#: option.c:401 msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "" -#: option.c:395 +#: option.c:402 msgid "Copy connection-track mark from queries to upstream connections." msgstr "" -#: option.c:396 +#: option.c:403 msgid "Allow DHCP clients to do their own DDNS updates." msgstr "" -#: option.c:397 +#: option.c:404 msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "" -#: option.c:398 +#: option.c:405 +msgid "Always send frequent router-advertisements" +msgstr "" + +#: option.c:406 msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "" -#: option.c:399 +#: option.c:407 #, fuzzy msgid "Specify host (A/AAAA and PTR) records" msgstr "Spesifiser en MX post." -#: option.c:400 +#: option.c:408 #, fuzzy msgid "Specify arbitrary DNS resource record" msgstr "Spesifiser TXT DNS post." -#: option.c:401 +#: option.c:409 #, fuzzy msgid "Bind to interfaces in use - check for new interfaces" msgstr "ukjent tilknytning (interface) %s" -#: option.c:402 +#: option.c:410 msgid "Export local names to global DNS" msgstr "" -#: option.c:403 +#: option.c:411 msgid "Domain to export to global DNS" msgstr "" -#: option.c:404 +#: option.c:412 msgid "Set TTL for authoritative replies" msgstr "" -#: option.c:405 +#: option.c:413 msgid "Set authoritive zone information" msgstr "" -#: option.c:406 +#: option.c:414 msgid "Secondary authoritative nameservers for forward domains" msgstr "" -#: option.c:407 +#: option.c:415 msgid "Peers which are allowed to do zone transfer" msgstr "" -#: option.c:408 +#: option.c:416 msgid "Specify ipsets to which matching domains should be added" msgstr "" -#: option.c:410 +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "" -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" @@ -647,305 +659,314 @@ msgstr "" "Bruk: dnsmasq [opsjoner]\n" "\n" -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "Bruk korte opsjoner kun på kommandolinjen.\n" -#: option.c:600 +#: option.c:609 #, fuzzy, c-format msgid "Valid options are:\n" msgstr "Gyldige opsjoner er :\n" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "dårlig port" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "" -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 #, fuzzy msgid "bad interface name" msgstr "dårlig MX navn" -#: option.c:720 +#: option.c:729 #, fuzzy msgid "bad address" msgstr "les %s - %d adresser" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "dårlig dhcp-opsjon" -#: option.c:929 +#: option.c:945 #, fuzzy msgid "bad IP address" msgstr "les %s - %d adresser" -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 #, fuzzy msgid "bad IPv6 address" msgstr "les %s - %d adresser" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "dårlig domene i dhcp-opsjon" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "dhcp-opsjon for lang" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "" -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "kan ikke lese %s: %s" -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "kan ikke lese %s: %s" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "" -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "" -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "dårlig MX preferanse" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "dårlig MX navn" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "dårlig MX mål" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "" -#: option.c:1521 +#: option.c:1537 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "" -#: option.c:1631 +#: option.c:1739 option.c:1800 #, fuzzy msgid "bad prefix" msgstr "dårlig port" -#: option.c:2043 +#: option.c:2094 msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "" -#: option.c:2223 +#: option.c:2274 #, fuzzy msgid "bad port range" msgstr "dårlig port" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "" -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "dårlig dhcp-område" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "ikke konsistent DHCP område" -#: option.c:2402 -msgid "prefix must be exactly 64 for RA subnets" +#: option.c:2459 +msgid "prefix length must be exactly 64 for RA subnets" msgstr "" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" +#: option.c:2461 +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "" -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2465 +msgid "prefix length must be at least 64" msgstr "" -#: option.c:2412 +#: option.c:2468 #, fuzzy msgid "inconsistent DHCPv6 range" msgstr "ikke konsistent DHCP område" -#: option.c:2519 option.c:2567 +#: option.c:2479 +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "" + +#: option.c:2590 option.c:2638 #, fuzzy msgid "bad hex constant" msgstr "dårlig dhcp-vert" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "" -#: option.c:2589 +#: option.c:2660 #, fuzzy, c-format msgid "duplicate dhcp-host IP address %s" msgstr "dubliserte IP adresser i %s dhcp-config direktiv." -#: option.c:2645 +#: option.c:2716 #, fuzzy msgid "bad DHCP host name" msgstr "dårlig MX navn" -#: option.c:2727 +#: option.c:2798 #, fuzzy msgid "bad tag-if" msgstr "dårlig MX mål" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "ugyldig portnummer" -#: option.c:3113 +#: option.c:3184 #, fuzzy msgid "bad dhcp-proxy address" msgstr "les %s - %d adresser" -#: option.c:3124 +#: option.c:3210 +#, fuzzy +msgid "Bad dhcp-relay" +msgstr "dårlig dhcp-område" + +#: option.c:3220 msgid "bad DUID" msgstr "" -#: option.c:3166 +#: option.c:3262 #, fuzzy msgid "invalid alias range" msgstr "ugyldig vekt" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "" -#: option.c:3230 +#: option.c:3330 #, fuzzy msgid "bad PTR record" msgstr "dårlig SRV post" -#: option.c:3261 +#: option.c:3361 #, fuzzy msgid "bad NAPTR record" msgstr "dårlig SRV post" -#: option.c:3295 +#: option.c:3395 #, fuzzy msgid "bad RR record" msgstr "dårlig SRV post" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "dårlig TXT post" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "dårlig SRV post" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "dårlig SRV mål" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "ugyldig prioritet" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "ugyldig vekt" -#: option.c:3417 +#: option.c:3517 #, fuzzy msgid "Bad host-record" msgstr "dårlig SRV post" -#: option.c:3434 +#: option.c:3534 #, fuzzy msgid "Bad name in host-record" msgstr "dårlig navn i %s" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "" -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "mangler \"" -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "dårlig opsjon" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "overflødig parameter" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "mangler parameter" -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "feil" -#: option.c:3592 +#: option.c:3692 #, fuzzy, c-format msgid " at line %d of %s" msgstr "%s på linje %d av %%s" -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "kan ikke lese %s: %s" -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, fuzzy, c-format msgid "read %s" msgstr "leser %s" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "" -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Dnsmasq versjon %s %s\n" -#: option.c:3951 +#: option.c:4051 #, fuzzy, c-format msgid "" "Compile time options: %s\n" @@ -954,62 +975,62 @@ msgstr "" "Kompileringsopsjoner %s\n" "\n" -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n" -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "DNsmasq er fri programvare, du er velkommen til å redistribuere den\n" -#: option.c:3954 +#: option.c:4054 #, fuzzy, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "under vilkårene gitt i GNU General Public License, versjon 2.\n" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "" -#: option.c:3969 +#: option.c:4069 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "dårlige kommandlinje opsjoner: %s." -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "klarer ikke å få vertsnavn: %s" -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "kun en resolv.conf fil tillat i no-poll modus." -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "må ha nøyaktig en resolv.conf å lese domene fra." -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "feilet å lese %s: %s" -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "intet søke direktiv funnet i %s" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "" @@ -1028,104 +1049,109 @@ msgstr "navnetjener %s nektet msgid "possible DNS-rebind attack detected: %s" msgstr "" -#: network.c:414 +#: forward.c:1216 +#, fuzzy, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "Spesifiser maksimum antall DHCP leier (standard er %s)" + +#: network.c:551 #, fuzzy, c-format msgid "failed to create listening socket for %s: %s" msgstr "feilet å lage lytte socket: %s" -#: network.c:743 +#: network.c:882 #, fuzzy, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "feilet å binde DHCP tjener socket: %s" -#: network.c:937 +#: network.c:1076 #, fuzzy, c-format msgid "failed to bind server socket for %s: %s" msgstr "feilet å binde lytte socket for %s: %s" -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "ignorerer navnetjener %s - lokal tilknytning" -#: network.c:985 +#: network.c:1124 #, fuzzy, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "ignorerer navnetjener %s - kan ikke lage/dinde socket: %s" -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "ikke kvalifisert" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "" -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "domene" -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "benytter lokale adresser kun for %s %s" -#: network.c:1011 +#: network.c:1150 #, fuzzy, c-format msgid "using standard nameservers for %s %s" msgstr "benytter navnetjener %s#%d for %s %s" -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "benytter navnetjener %s#%d for %s %s" -#: network.c:1016 +#: network.c:1155 #, fuzzy, c-format msgid "using nameserver %s#%d(via %s)" msgstr "benytter navnetjener %s#%d" -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "benytter navnetjener %s#%d" -#: dnsmasq.c:131 +#: dnsmasq.c:134 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "" -#: dnsmasq.c:139 +#: dnsmasq.c:142 #, fuzzy msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h" -#: dnsmasq.c:144 +#: dnsmasq.c:147 msgid "asychronous logging is not available under Solaris" msgstr "" -#: dnsmasq.c:149 +#: dnsmasq.c:152 msgid "asychronous logging is not available under Android" msgstr "" -#: dnsmasq.c:154 +#: dnsmasq.c:157 #, fuzzy msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "" @@ -1143,428 +1169,433 @@ msgstr "feilet msgid "unknown interface %s" msgstr "ukjent tilknytning (interface) %s" -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "DBus feil: %s" -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, fuzzy, c-format msgid "started, version %s DNS disabled" msgstr "startet, versjon %s mellomlager deaktivert" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "startet, versjon %s mellomlager størrelse %d" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "startet, versjon %s mellomlager deaktivert" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "kompilerings opsjoner: %s" -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "DBus støtte aktivert: koblet til system buss" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "DBus støtte aktivert: avventer buss tilkobling" -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, fuzzy, c-format msgid "warning: failed to change owner of %s: %s" msgstr "feilet å laste navn fra %s: %s" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "setter --bind-interfaces opsjon på grunn av OS begrensninger" -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "advarsel: nettverkskort %s eksisterer ikke for tiden" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:633 +#: dnsmasq.c:634 #, fuzzy msgid "warning: no upstream servers configured" msgstr "setter oppstrøms tjener fra DBus" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "" -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 #, fuzzy msgid "enabled" msgstr "deaktivert" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "tilkoblet til system DBus" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, fuzzy, c-format msgid "failed to create helper: %s" msgstr "feilet å lese %s: %s" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, c-format msgid "setting capabilities failed: %s" msgstr "" -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, fuzzy, c-format msgid "failed to change user-id to %s: %s" msgstr "feilet å laste navn fra %s: %s" -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, fuzzy, c-format msgid "failed to change group-id to %s: %s" msgstr "feilet å laste navn fra %s: %s" -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, fuzzy, c-format msgid "failed to open pidfile %s: %s" msgstr "feilet å lese %s: %s" -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, fuzzy, c-format msgid "cannot open log %s: %s" msgstr "kan ikke åpne %s:%s" -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, fuzzy, c-format msgid "failed to load Lua script: %s" msgstr "feilet å laste %s: %s" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, c-format msgid "script process killed by signal %d" msgstr "" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, c-format msgid "script process exited with status %d" msgstr "" -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, fuzzy, c-format msgid "failed to execute %s: %s" msgstr "feilet å få tilgang til %s: %s" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "avslutter etter mottak av SIGTERM" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, fuzzy, c-format msgid "failed to access %s: %s" msgstr "feilet å få tilgang til %s: %s" -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "leser %s" -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "intet søke direktiv funnet i %s" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "kan ikke lage DHCP socket: %s" -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "feilet å sette opsjoner på DHCP socket: %s" -#: dhcp.c:77 +#: dhcp.c:89 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "feilet å sette SO_REUSEADDR på DHCP socket: %s" -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "feilet å binde DHCP tjener socket: %s" -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "kan ikke lage ICMP raw socket: %s" -#: dhcp.c:225 +#: dhcp.c:239 #, fuzzy, c-format msgid "unknown interface %s in bridge-interface" msgstr "ukjent tilknytning (interface) %s" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "" -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "DHCP område %s -- %s er ikke konsistent med nettmaske %s" -#: dhcp.c:832 +#: dhcp.c:806 #, c-format msgid "bad line at %s line %d" msgstr "dårlig linje ved %s linje %d" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + #: lease.c:61 #, fuzzy, c-format msgid "cannot open or create lease file %s: %s" msgstr "kan ikke åpne eller lage leie fil: %s" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "for mange lagrede leier" -#: lease.c:164 +#: lease.c:165 #, fuzzy, c-format msgid "cannot run lease-init script %s: %s" msgstr "kan ikke lese %s: %s" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "" -#: lease.c:339 +#: lease.c:342 #, fuzzy, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "feilet å lese %s: %s" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "" -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "med subnet velger" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "via" -#: rfc2131.c:350 +#: rfc2131.c:351 #, fuzzy, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, c-format msgid "%u available DHCP range: %s -- %s" msgstr "" -#: rfc2131.c:382 -msgid "disabled" -msgstr "deaktivert" - -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "oversett" - -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "adresse i bruk" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "ingen adresse tilgjengelig" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "galt nettverk" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "ingen adresse konfigurert" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "ingen leier igjen" - -#: rfc2131.c:576 rfc3315.c:428 -#, c-format -msgid "%u client provides name: %s" -msgstr "" - -#: rfc2131.c:731 +#: rfc2131.c:465 #, fuzzy, c-format msgid "%u vendor class: %s" msgstr "DBus feil: %s" -#: rfc2131.c:733 +#: rfc2131.c:467 #, fuzzy, c-format msgid "%u user class: %s" msgstr "DBus feil: %s" +#: rfc2131.c:494 +msgid "disabled" +msgstr "deaktivert" + +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "oversett" + +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "adresse i bruk" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "ingen adresse tilgjengelig" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "galt nettverk" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "ingen adresse konfigurert" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "ingen leier igjen" + +#: rfc2131.c:687 rfc3315.c:466 +#, c-format +msgid "%u client provides name: %s" +msgstr "" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "" -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "deaktiverer DHCP statisk adresse %s" -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "ukjent leie" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:986 +#: rfc2131.c:994 #, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:989 +#: rfc2131.c:997 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "" -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "gal adresse" -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "leie ikke funnet" -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "adresse ikke tilgjengelig" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "statisk leie tilgjengelig" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "adresse reservert" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "" -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, fuzzy, c-format msgid "%u server name: %s" msgstr "DBus feil: %s" -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, fuzzy, c-format msgid "%u next server: %s" msgstr "DBus feil: %s" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, fuzzy, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "kan ikke sende DHCP opsjon %d: ikke mer plass i pakken" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "" -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, fuzzy, c-format msgid "%u requested options: %s" msgstr "kompilerings opsjoner: %s" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "" @@ -1574,7 +1605,7 @@ msgstr "" msgid "cannot create netlink socket: %s" msgstr "kan ikke binde netlink socket: %s" -#: netlink.c:354 +#: netlink.c:363 #, fuzzy, c-format msgid "netlink returns error: %s" msgstr "DBus feil: %s" @@ -1583,53 +1614,53 @@ msgstr "DBus feil: %s" msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "forsøk på å sette en IPv6 tjener adresse via DBus - ingen IPv6 støtte" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "setter oppstrøms tjener fra DBus" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "kunne ikke registrere en DBus meldingshåndterer" -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "kan ikke lage DHCP BPF socket: %s" -#: bpf.c:225 +#: bpf.c:273 #, fuzzy, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "DHCP krav for ikke støttet maskinvare type (%d) mottatt på %s" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "" -#: tftp.c:420 +#: tftp.c:433 #, fuzzy, c-format msgid "file %s not found" msgstr "leie ikke funnet" -#: tftp.c:529 +#: tftp.c:542 #, c-format msgid "error %d %s received from %s" msgstr "" -#: tftp.c:571 +#: tftp.c:584 #, fuzzy, c-format msgid "failed sending %s to %s" msgstr "feilet å lese %s: %s" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "sent %s to %s" msgstr "" @@ -1653,187 +1684,203 @@ msgstr "FEILET msgid "Conntrack connection mark retrieval failed: %s" msgstr "" -#: dhcp6.c:49 +#: dhcp6.c:59 #, fuzzy, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "kan ikke lage DHCP socket: %s" -#: dhcp6.c:62 +#: dhcp6.c:80 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "feilet å sette SO_REUSEADDR på DHCP socket: %s" -#: dhcp6.c:74 +#: dhcp6.c:92 #, fuzzy, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "feilet å binde DHCP tjener socket: %s" -#: rfc3315.c:135 +#: rfc3315.c:149 #, fuzzy, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s" -#: rfc3315.c:144 +#: rfc3315.c:158 #, fuzzy, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s" -#: rfc3315.c:269 +#: rfc3315.c:289 #, fuzzy, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "ingen adresse område tilgjengelig for DHCP krav %s %s" -#: rfc3315.c:350 +#: rfc3315.c:370 #, fuzzy, c-format msgid "%u vendor class: %u" msgstr "DBus feil: %s" -#: rfc3315.c:609 +#: rfc3315.c:418 +#, fuzzy, c-format +msgid "%u client MAC address: %s" +msgstr "ingen tilknytning (interface) med adresse %s" + +#: rfc3315.c:650 #, fuzzy, c-format msgid "unknown prefix-class %d" msgstr "ukjent leie" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "" -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 #, fuzzy msgid "no addresses available" msgstr "ingen adresse tilgjengelig" -#: rfc3315.c:806 +#: rfc3315.c:855 #, fuzzy msgid "address unavailable" msgstr "adresse ikke tilgjengelig" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "" -#: rfc3315.c:951 +#: rfc3315.c:1006 #, fuzzy msgid "address invalid" msgstr "adresse i bruk" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "" -#: rfc3315.c:1003 +#: rfc3315.c:1059 #, fuzzy msgid "all addresses still on link" msgstr "dårlig adresse ved %s linje %d" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "" -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "dubliserte IP adresser i %s (%s) i dhcp-config direktiv" -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, fuzzy, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "feilet å sette SO_REUSEADDR på DHCP socket: %s" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, c-format msgid "Known DHCPv6 options:\n" msgstr "" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr "" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr "" -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "" -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, fuzzy, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "DHCP, statisk leie kun på %.0s%s, leie tid %s" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "" -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, fuzzy, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "DHCP, IP område %s -- %s, leie tid %s" -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "" -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, fuzzy, c-format msgid "router advertisement on %s%s" msgstr "DHCP, statisk leie kun på %.0s%s, leie tid %s" -#: radv.c:87 +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + +#: radv.c:93 #, fuzzy, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "kan ikke lage DHCP socket: %s" -#: auth.c:402 +#: auth.c:435 #, c-format msgid "ignoring zone transfer request from %s" msgstr "" -#: ipset.c:71 +#: ipset.c:95 #, fuzzy, c-format msgid "failed to find kernel version: %s" msgstr "feilet å binde DHCP tjener socket: %s" -#: ipset.c:90 +#: ipset.c:114 #, fuzzy, c-format msgid "failed to create IPset control socket: %s" msgstr "feilet å lage lytte socket: %s" -#~ msgid "no interface with address %s" -#~ msgstr "ingen tilknytning (interface) med adresse %s" - #~ msgid "duplicate IP address %s in dhcp-config directive." #~ msgstr "dubliserte IP adresser i %s dhcp-config direktiv." diff --git a/po/pl.po b/po/pl.po index 437f324..7b96fbe 100644 --- a/po/pl.po +++ b/po/pl.po @@ -26,17 +26,17 @@ msgstr "" msgid "failed to load names from %s: %s" msgstr "nie potrafiÄ™ wczytać nazw z %s: %s" -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, c-format msgid "bad address at %s line %d" msgstr "błędny adres w pliku %s, w linii %d" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "błędna nazwa w pliku %s, w linii %d" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "wczytaÅ‚em %s - %d adresów" @@ -45,37 +45,37 @@ msgstr "wczytaÅ‚em %s - %d adresów" msgid "cleared cache" msgstr "wyczyszczono pamięć podrÄ™cznÄ…" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "Nie znalazÅ‚em adresu IPv4 komputera %s" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "%s to nazwa CNAME, nie przypisujÄ™ jej dzierżawie DHCP %s" -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "nazwa %s nie zostaÅ‚a nadana dzierżawie DHCP %s, ponieważ nazwa istnieje w %s i ma już adres %s" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "czas %lu" -#: cache.c:1163 +#: cache.c:1131 #, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "wielkość pamiÄ™ci podrÄ™cznej: %d; %d z %d miejsc aktualnych wpisów użyto ponownie." -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "%u zapytaÅ„ przesÅ‚anych dalej, %u odpowiedzi udzielonych samodzielnie" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "serwer %s#%d: %u zapytaÅ„ wysÅ‚anych, %u ponowionych lub nieudanych" @@ -85,543 +85,555 @@ msgstr "serwer %s#%d: %u zapytaÅ„ wysÅ‚anych, %u ponowionych lub nieudanych" msgid "failed to seed the random number generator: %s" msgstr "brak możliwoÅ›ci użycia generatora liczb losowych: %s" -#: util.c:189 +#: util.c:192 msgid "failed to allocate memory" msgstr "nie udaÅ‚o siÄ™ przydzielić pamiÄ™ci" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "nie można dostać pamiÄ™ci" -#: util.c:237 +#: util.c:240 #, c-format msgid "cannot create pipe: %s" msgstr "błąd podczas próby utworzenia potoku: %s" -#: util.c:245 +#: util.c:248 #, c-format msgid "failed to allocate %d bytes" msgstr "niemożliwość przydzielenia %d bajtów pamiÄ™ci" -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "nieskoÅ„czona" -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "Wskazanie adresów, na których należy nasÅ‚uchiwać." -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "Zwracanie adresu IP dla wszystkich hostów we wskazanych domenach." -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "Wyłączenie przekazywania zapytaÅ„ odwrotnych dla prywatnych zakresów IP." -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "Traktowanie adresu IP jako NXDOMAIN (unieważnia ,,Verisign wildcard'')." -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "Wskazanie wielkoÅ›ci pamiÄ™ci podrÄ™cznej (domyÅ›lnie: %s miejsc)." -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "Wskazanie pliku konfiguracyjnego (domyÅ›lnie: %s)." -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "NIE twórz procesu potomnego w tle: dziaÅ‚anie w trybie debugowania." -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "Wyłączenie przekazywania zapytaÅ„ bez podanej części domenowej." -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "Zwracanie samowskazujÄ…cego rekordu MX dla lokalnych hostów." -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "Rozwijanie prostych nazw z /etc/hosts przyrostkiem domenowym." -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "Wyłączenie przekazywania pozornych zapytaÅ„ DNS z komputerów dziaÅ‚ajÄ…cych pod Windows." -#: option.c:297 +#: option.c:303 msgid "Enable DHCP in the range given with lease duration." msgstr "Włączenie serwera DHCP dla wskazanego zakresu adresów." -#: option.c:298 +#: option.c:304 #, c-format msgid "Change to this group after startup (defaults to %s)." msgstr "Po uruchomieniu zmiana grupy procesu na podanÄ… (domyÅ›lnie: %s)." -#: option.c:299 +#: option.c:305 msgid "Set address or hostname for a specified machine." msgstr "Ustawienie adresu lub nazwy dla wskazanego komputera." -#: option.c:300 +#: option.c:306 msgid "Read DHCP host specs from file." msgstr "Wskazanie pliku z wartoÅ›ciami 'dhcp-host='." -#: option.c:301 +#: option.c:307 msgid "Read DHCP option specs from file." msgstr "Wskazanie pliku z wartoÅ›ciami 'dhcp-option='." -#: option.c:302 +#: option.c:308 msgid "Evaluate conditional tag expression." msgstr "Warunkowe ustawianie znaczników." -#: option.c:303 +#: option.c:309 #, c-format msgid "Do NOT load %s file." msgstr "NIE wczytywanie pliku %s." -#: option.c:304 +#: option.c:310 #, c-format msgid "Specify a hosts file to be read in addition to %s." msgstr "Wskazanie dodatkowego pliku 'hosts' oprócz %s." -#: option.c:305 +#: option.c:311 msgid "Specify interface(s) to listen on." msgstr "Interfejsy, na których nasÅ‚uchiwać." -#: option.c:306 +#: option.c:312 msgid "Specify interface(s) NOT to listen on." msgstr "Interfejsy, na których NIE nasÅ‚uchiwać." -#: option.c:307 +#: option.c:313 msgid "Map DHCP user class to tag." msgstr "PrzyporzÄ…dkowanie znacznika w zależnoÅ›ci od klasy użytkownika DHCP." -#: option.c:308 +#: option.c:314 msgid "Map RFC3046 circuit-id to tag." msgstr "PrzyporzÄ…dkowanie znacznika w zależnoÅ›ci od numeru obwodu (w rozumieniu RFC3046)." -#: option.c:309 +#: option.c:315 msgid "Map RFC3046 remote-id to tag." msgstr "PrzyporzÄ…dkowanie znacznika w zależnoÅ›ci od numeru agenta (w rozumieniu RFC3046)." -#: option.c:310 +#: option.c:316 msgid "Map RFC3993 subscriber-id to tag." msgstr "PrzyporzÄ…dkowanie znacznika w zależnoÅ›ci od numeru subskrybenta (w rozumieniu RFC3993)." -#: option.c:311 +#: option.c:317 msgid "Don't do DHCP for hosts with tag set." msgstr "Wyłączenie DHCP dla hostów z okreÅ›lonym znacznikiem." -#: option.c:312 +#: option.c:318 msgid "Force broadcast replies for hosts with tag set." msgstr "Wymuszenie odpowiedzi w trybie rozgÅ‚oszeniowym dla hostów z okreÅ›lonym znacznikiem." -#: option.c:313 +#: option.c:319 msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "NIE twórz procesu potomnego w tle i NIE włączaj trybu debugowania." -#: option.c:314 +#: option.c:320 msgid "Assume we are the only DHCP server on the local network." msgstr "ZakÅ‚adanie, że jesteÅ›my jedynym serwerem DHCP w sieci lokalnej." -#: option.c:315 +#: option.c:321 #, c-format msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "Åšcieżka przechowywania pliku dzierżaw DHCP (domyÅ›lnie: %s)." -#: option.c:316 +#: option.c:322 msgid "Return MX records for local hosts." msgstr "Włączenie zwracania rekordu MX dla hostów lokalnych." -#: option.c:317 +#: option.c:323 msgid "Specify an MX record." msgstr "Specyfikacja rekordu MX." -#: option.c:318 +#: option.c:324 msgid "Specify BOOTP options to DHCP server." msgstr "OkreÅ›lenie opcji BOOTP serwera DHCP." -#: option.c:319 +#: option.c:325 #, c-format msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "Wyłączenie obserwowania pliku %s; ponowne odczytywanie tylko po odebraniu sygnaÅ‚u SIGHUP." -#: option.c:320 +#: option.c:326 msgid "Do NOT cache failed search results." msgstr "Wyłączenie przechowywania w pamiÄ™ci podrÄ™cznej wyników nieudanych wyszukiwaÅ„." -#: option.c:321 +#: option.c:327 #, c-format msgid "Use nameservers strictly in the order given in %s." msgstr "Odpytywanie serwerów nazw w kolejnoÅ›ci ich wystÄ…pienia w %s." -#: option.c:322 +#: option.c:328 msgid "Specify options to be sent to DHCP clients." msgstr "Specyfikacja opcji wysyÅ‚anej do klientów DHCP." -#: option.c:323 +#: option.c:329 msgid "DHCP option sent even if the client does not request it." msgstr "Opcja DHCP wysyÅ‚ana nawet jeżeli klient o niÄ… nie prosi." -#: option.c:324 +#: option.c:330 msgid "Specify port to listen for DNS requests on (defaults to 53)." msgstr "Wskazanie portu do nasÅ‚uchiwania zapytaÅ„ DNS (domyÅ›lnie: 53)." -#: option.c:325 +#: option.c:331 #, c-format msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." msgstr "Maksymalna obsÅ‚ugiwana wielkość pakietu EDNS.0 (domyÅ›lnie: %s)." -#: option.c:326 +#: option.c:332 msgid "Log DNS queries." msgstr "Włączenie spisywania zapytaÅ„ DNS do logu." -#: option.c:327 +#: option.c:333 msgid "Force the originating port for upstream DNS queries." msgstr "Wymuszenie użycia wskazanego portu UDP do odpytywania nadrzÄ™dnych serwerów DNS i odbierania od nich odpowiedzi." -#: option.c:328 +#: option.c:334 msgid "Do NOT read resolv.conf." msgstr "Wyłączenie czytania pliku resolv.conf." -#: option.c:329 +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "Wskazanie poÅ‚ożenia pliku resolv.conf (domyÅ›lnie: %s)." -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "Wskazywanie adresów serwerów nazw, opcjonalnie z przypisaniem do domeny." -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "Wyłączenie przekazywania zapytaÅ„ do wskazanych domen." -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "Wskazanie domeny dla serwera DHCP." -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "OkreÅ›lenie domyÅ›lnego celu w rekordzie MX." -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "OkreÅ›lenie (w sekundach) czasu ważnoÅ›ci odpowiedzi udzielonych na podstawie /etc/hosts (domyÅ›lnie 0)." -#: option.c:335 +#: option.c:341 msgid "Specify time-to-live in seconds for negative caching." msgstr "OkreÅ›lenie (w sekundach) czasu ważnoÅ›ci negatywnych odpowiedzi." -#: option.c:336 +#: option.c:342 msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "Ograniczenie maksymalnego czasu ważnoÅ›ci odpowiedzi (TTL) podawanego klientom [w sekundach]." -#: option.c:337 +#: option.c:343 #, c-format msgid "Change to this user after startup. (defaults to %s)." msgstr "Zmiana użytkownika procesu na wskazanego (po uruchomieniu, domyÅ›lnie: %s)." -#: option.c:338 +#: option.c:344 msgid "Map DHCP vendor class to tag." msgstr "PrzyporzÄ…dkowanie znacznika w zależnoÅ›ci od typu klienta DHCP." -#: option.c:339 +#: option.c:345 msgid "Display dnsmasq version and copyright information." msgstr "Wydrukowanie informacji o programie i ochronie praw autorskich." -#: option.c:340 +#: option.c:346 msgid "Translate IPv4 addresses from upstream servers." msgstr "TÅ‚umaczenie adresów IPv4 z serwerów nadrzÄ™dnych." -#: option.c:341 +#: option.c:347 msgid "Specify a SRV record." msgstr "OkreÅ›lenie rekordu SRV." -#: option.c:342 +#: option.c:348 msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "WyÅ›wietla ten komunikat. Użyj '--help dhcp' chcÄ…c przejrzeć listÄ™ opcji DHCP (dhcp-option=xxx,...)." -#: option.c:343 +#: option.c:349 #, c-format msgid "Specify path of PID file (defaults to %s)." msgstr "OkreÅ›lenie Å›cieżki do pliku PID (domyÅ›lnie: %s)." -#: option.c:344 +#: option.c:350 #, c-format msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "Maksymalna liczba dzierżaw DHCP (domyÅ›lnie: %s)." -#: option.c:345 +#: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." msgstr "Uzależnienie odpowiedzi DNS od interfejsu, na którym odebrano zapytanie (wygodne dla serwerów kilku podsieci z różnymi adresami w /etc/hosts)." -#: option.c:346 +#: option.c:352 msgid "Specify TXT DNS record." msgstr "Specyfikacja rekordu DNS TXT." -#: option.c:347 +#: option.c:353 msgid "Specify PTR DNS record." msgstr "Specyfikacja rekordu DNS PTR." -#: option.c:348 +#: option.c:354 msgid "Give DNS name to IPv4 address of interface." msgstr "Zwraca nazwÄ™ domenowÄ… powiÄ…zanÄ… z adresem interfejsu sieciowego." -#: option.c:349 +#: option.c:355 msgid "Bind only to interfaces in use." msgstr "NasÅ‚uchiwanie tylko na wykorzystywanych interfejsach (umożliwia uruchomienie osobnych serwerów dla różnych kart)." -#: option.c:350 +#: option.c:356 #, c-format msgid "Read DHCP static host information from %s." msgstr "Wczytanie przyporzÄ…dkowaÅ„ adresów z %s." -#: option.c:351 +#: option.c:357 msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "Włączenie używania interfejsu DBus do informowania o zmianach konfiguracji." -#: option.c:352 +#: option.c:358 msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "Uruchomienie na wskazanym interfejsie tylko DNS-a, bez usÅ‚ug DHCP i TFTP." -#: option.c:353 +#: option.c:359 msgid "Enable dynamic address allocation for bootp." msgstr "Włączenie dynamicznego przydzielania adresów dla klientów BOOTP." -#: option.c:354 +#: option.c:360 msgid "Map MAC address (with wildcards) to option set." msgstr "PrzyporzÄ…dkowanie znacznika w zależnoÅ›ci od adresu MAC (można używać uogólnieÅ„: *)." -#: option.c:355 +#: option.c:361 msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "Traktowanie żądaÅ„ DHCP odebranych na interfejsach alias, ..., jako odebranych na iface." -#: option.c:356 +#: option.c:362 msgid "Disable ICMP echo address checking in the DHCP server." msgstr "PominiÄ™cie sprawdzania za pomocÄ… ICMP niezajÄ™toÅ›ci adresu przed jego wydzierżawieniem." -#: option.c:357 +#: option.c:363 msgid "Shell script to run on DHCP lease creation and destruction." msgstr "Skrypt powÅ‚oki uruchamiany po przyznaniu lub zwolnieniu adresu." -#: option.c:358 +#: option.c:364 msgid "Lua script to run on DHCP lease creation and destruction." msgstr "Skrypt Lua uruchamiany po przyznaniu lub zwolnieniu adresu." -#: option.c:359 +#: option.c:365 msgid "Run lease-change scripts as this user." msgstr "Wskazanie użytkownika z którego uprawnieniami bÄ™dÄ… uruchamiane skrypty." -#: option.c:360 +#: option.c:366 msgid "Read configuration from all the files in this directory." msgstr "Wczytanie wszystkich plików ze wskazanego katalogu jako konfiguracyjnych." -#: option.c:361 +#: option.c:367 msgid "Log to this syslog facility or file. (defaults to DAEMON)" msgstr "Wskazanie kanaÅ‚u syslog-a do którego majÄ… trafiać komunikaty (domyÅ›lnie: DAEMON)" -#: option.c:362 +#: option.c:368 msgid "Do not use leasefile." msgstr "Nieużywanie bazy dzierżaw." -#: option.c:363 +#: option.c:369 #, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "Maksymalna liczba jednoczeÅ›nie obsÅ‚ugiwanych zapytaÅ„ DNS (domyÅ›lnie: %s)" -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "Czyszczenie pamiÄ™ci podrÄ™cznej serwera nazw w przypadku ponownego odczytu %s." -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "Nie zwracanie uwagi na nazwÄ™ podawanÄ… przez klienta w przypadku dopasowania wszystkich wymienionych znaczników." -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "Wyłączenie oszczÄ™dzania miejsca w pakiecie DHCP przez przesuwanie pól servername i filename do opcji DHCP. Wymusza prostszy tryb budowy pakietu rozwiÄ…zujÄ…c problemy z nieprzystosowanymi klientami DHCP." -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "Włączenie wbudowanego serwera TFTP (tylko do wysyÅ‚ania)." -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "Ograniczenie dziaÅ‚ania serwera TFTP do wskazanego katalogu i podkatalogów. Nazwy z .. sÄ… odrzucane, / odnosi siÄ™ do wskazanego katalogu." -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "Doklejanie adresu IP klienta do głównego katalogu TFTP. Jeżeli wynikowy katalog nie istnieje, nadal wykorzystuje siÄ™ tftp-root." -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "Ograniczenie dostÄ™pu do plików przez TFTP do tych, których wÅ‚aÅ›cicielem jest użytkownik uruchamiajÄ…cy dnsmasq-a." -#: option.c:371 +#: option.c:377 #, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "Maksymalna liczba jednoczeÅ›nie obsÅ‚ugiwanych połączeÅ„ TFTP (domyÅ›lnie %s)." -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "Wyłączenie możliwoÅ›ci negocjowania wielkoÅ›ci bloku dla przesyłów przez TFTP." -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "Konwertowanie nazw plików żądanych przez TFTP do maÅ‚ych liter" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "Wskazanie zakresu portów do użytku TFTP." -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "Włączenie spisywania w logu operacji DHCP." -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "Włączenie asynchronicznego zapisywania do logu z ewentualnym wskazaniem dÅ‚ugoÅ›ci kolejki." -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "Odfiltrowywanie adresów wskazujÄ…cych na komputery w sieciach wewnÄ™trznych spoÅ›ród odpowiedzi od zewnÄ™trznych serwerów DNS." -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "Zezwolenie na przekazywanie odpowiedzi w klasie 127.0.0.0/8. Dla serwerów RBL." -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "Dezaktywacja zabezpieczenia przed atakami DNS-rebind dla wskazanych domen." -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "Jednoczesne odpytywanie wszystkich serwerów nadrzÄ™dnych; klientowi przekazywana jest pierwsza odpowiedź." -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "Ustawienie znacznika jeżeli w żądaniu DHCP pojawi siÄ™ wskazana opcja, ewentualnie o konkretnej wartoÅ›ci." -#: option.c:382 +#: option.c:388 msgid "Use alternative ports for DHCP." msgstr "Użycie alternatywnych portów dla usÅ‚ugi DHCP." -#: option.c:383 +#: option.c:389 msgid "Specify NAPTR DNS record." msgstr "Specyfikacja rekordu DNS NAPTR." -#: option.c:384 +#: option.c:390 msgid "Specify lowest port available for DNS query transmission." msgstr "Ustawienie dolnej granicy numerów portów do przesyÅ‚ania zapytaÅ„ DNS." -#: option.c:385 +#: option.c:391 msgid "Use only fully qualified domain names for DHCP clients." msgstr "Przechowywanie w serwerze DNS dnsmasq-a tylko w peÅ‚ni kwalifikowanych nazw zgÅ‚aszanych przez klientów DHCP." -#: option.c:386 +#: option.c:392 msgid "Generate hostnames based on MAC address for nameless clients." msgstr "Generowanie nazw na podstawie MAC-adresów dla klientów bez nazwy." -#: option.c:387 +#: option.c:393 msgid "Use these DHCP relays as full proxies." msgstr "Traktowanie wskazanych serwerów poÅ›redniczÄ…cych DHCP jako dziaÅ‚ajÄ…cych w trybie \"peÅ‚nomocnika\" (full-proxy)." -#: option.c:388 +#: option.c:394 +msgid "Relay DHCP requests to a remote server" +msgstr "" + +#: option.c:395 msgid "Specify alias name for LOCAL DNS name." msgstr "Wskazanie synonimu nazwy komputera lokalnego - znanego z /etc/hosts albo z DHCP." -#: option.c:389 +#: option.c:396 msgid "Prompt to send to PXE clients." msgstr "ZgÅ‚oszenie wysyÅ‚ane klientom PXE." -#: option.c:390 +#: option.c:397 msgid "Boot service for PXE menu." msgstr "SkÅ‚adnik menu PXE (--> man)." -#: option.c:391 +#: option.c:398 msgid "Check configuration syntax." msgstr "Sprawdzenie skÅ‚adni." -#: option.c:392 +#: option.c:399 msgid "Add requestor's MAC address to forwarded DNS queries." msgstr "Przekazywanie MAC-adresu komputera pytajÄ…cego w ruchu wychodzÄ…cym DNS." -#: option.c:393 +#: option.c:400 msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "Przekazywanie wyników weryfikacji DNSSEC z serwerów nadrzÄ™dnych." -#: option.c:394 +#: option.c:401 msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "Zmiana sposobu przydzielania adresów IP na sekwencyjny." -#: option.c:395 +#: option.c:402 msgid "Copy connection-track mark from queries to upstream connections." msgstr "Zachowanie znacznika połączenia z odebranego zapytania DNS w ruchu zewnÄ™trznym." -#: option.c:396 +#: option.c:403 msgid "Allow DHCP clients to do their own DDNS updates." msgstr "Zezwolenie klientom DHCP na uaktualnianie DDNS-ów." -#: option.c:397 +#: option.c:404 msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "Załączenie anonsowania (RA) na interfejsach serwujÄ…cych DHCPv6" -#: option.c:398 +#: option.c:405 +msgid "Always send frequent router-advertisements" +msgstr "" + +#: option.c:406 msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "OkreÅ›lenie DHCPv6 DUID" -#: option.c:399 +#: option.c:407 msgid "Specify host (A/AAAA and PTR) records" msgstr "OkreÅ›lenie rekordów A/AAAA i PTR" -#: option.c:400 +#: option.c:408 msgid "Specify arbitrary DNS resource record" msgstr "OkreÅ›lenie rekordu TXT" -#: option.c:401 +#: option.c:409 msgid "Bind to interfaces in use - check for new interfaces" msgstr "Dynamiczne podpinanie do interfejsów sieciowych" -#: option.c:402 +#: option.c:410 msgid "Export local names to global DNS" msgstr "Eksportowanie lokalnych nazw hostów do globalnego DNS-a" -#: option.c:403 +#: option.c:411 msgid "Domain to export to global DNS" msgstr "Domena pod którÄ… bÄ™dÄ… eksportowane lokalne nazwy" -#: option.c:404 +#: option.c:412 msgid "Set TTL for authoritative replies" msgstr "OkreÅ›lenie TTL dla odpowiedzi autorytatywnych" -#: option.c:405 +#: option.c:413 msgid "Set authoritive zone information" msgstr "OkreÅ›lenie danych strefy autorytatywnej (SOA)" -#: option.c:406 +#: option.c:414 msgid "Secondary authoritative nameservers for forward domains" msgstr "Pomocnicze serwery autorytatywne dla forwardowanych domen" -#: option.c:407 +#: option.c:415 msgid "Peers which are allowed to do zone transfer" msgstr "Wskazanie serwerów uprawnionych do transferu stref" -#: option.c:408 +#: option.c:416 msgid "Specify ipsets to which matching domains should be added" msgstr "Wyszczególnienie ipset-ów, do których bÄ™dÄ… dopisywane adresy IP leżące we wskazanych domenach" -#: option.c:410 +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "OkreÅ›lenie prefiksu klasy DHCPv6" -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" @@ -630,288 +642,301 @@ msgstr "" "Użycie: dnsmasq [opcje]\n" "\n" -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "W tym systemie w linii poleceÅ„ można używać wyłącznie jednoliterowych opcji.\n" -#: option.c:600 +#: option.c:609 #, c-format msgid "Valid options are:\n" msgstr "DostÄ™pne opcje:\n" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "nieprawidÅ‚owy numer portu" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "nie ma możliwoÅ›ci dowiÄ…zywania do interfejsu" -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 msgid "bad interface name" msgstr "nieprawidÅ‚owa nazwa interfejsu" -#: option.c:720 +#: option.c:729 msgid "bad address" msgstr "zÅ‚y adres" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "nieobsÅ‚ugiwany rodzaj enkapsulacji opcji IPv6" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "błąd w dhcp-option" -#: option.c:929 +#: option.c:945 msgid "bad IP address" msgstr "zÅ‚y adres IP" -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 msgid "bad IPv6 address" msgstr "zÅ‚y adres IPv6" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "nieprawidÅ‚owa nazwa domeny w dhcp-option" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "zbyt dÅ‚uga dhcp-option (>255 znaków)" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "niedopuszczalne dhcp-match" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "wielokrotne użycie opcji niedozwolone (pojawiÅ‚a siÄ™ wczeÅ›niej w linii poleceÅ„)" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "wielokrotne użycie opcji niedozwolone (pojawiÅ‚a siÄ™ wszeÅ›niej w pliku konfiguracyjnym)" -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, c-format msgid "cannot access directory %s: %s" msgstr "brak dostÄ™pu do katalogu %s: %s" -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, c-format msgid "cannot access %s: %s" msgstr "brak dostÄ™pu do %s: %s" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "zmiana log-facility w systemie Android nie jest możliwa" -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "nierozpoznany znacznik logów" -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "nieprawidÅ‚owa wartość preferencji MX" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "nieprawidÅ‚owa nazwa MX" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "nieprawidÅ‚owa wartość celu MX" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "w uClinuksie nie ma możliwoÅ›ci uruchamiania skryptów" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "żeby mieć możliwość używania skryptów wywoÅ‚ywanych przy zmianie dzierżawy, przekompiluj dnsmasq-a z włączonÄ… flagÄ… HAVE_SCRIPT" -#: option.c:1521 +#: option.c:1537 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "używanie skryptów Lua, wymaga skompilowania dnsmasq-a z flagÄ… HAVE_LUASCRIPT" -#: option.c:1631 +#: option.c:1739 option.c:1800 msgid "bad prefix" msgstr "zÅ‚a maska" -#: option.c:2043 +#: option.c:2094 msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "chcÄ…c korzystać z ipsets przekompiluj dnsmasq-a z HAVE_IPSET" -#: option.c:2223 +#: option.c:2274 msgid "bad port range" msgstr "nieprawidÅ‚owy zakres numerów portów" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "nieprawidÅ‚owa nazwa urzÄ…dzenia w bridge-interface" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "można wskazać tylko jeden znacznik sieci" -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "nieprawidÅ‚owy zakres dhcp-range" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "niespójny zakres adresów DHCP" -#: option.c:2402 -msgid "prefix must be exactly 64 for RA subnets" +#: option.c:2459 +#, fuzzy +msgid "prefix length must be exactly 64 for RA subnets" msgstr "prefix musi mieć wartość =64 dla podsieci RA" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" +#: option.c:2461 +#, fuzzy +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "prefix dla podsieci musi wynosić równo 64" -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2465 +#, fuzzy +msgid "prefix length must be at least 64" msgstr "prefix musi mieć wartość >=64" -#: option.c:2412 +#: option.c:2468 msgid "inconsistent DHCPv6 range" msgstr "niespójny zakres adresów DHCPv6" -#: option.c:2519 option.c:2567 +#: option.c:2479 +#, fuzzy +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "prefix dla podsieci musi wynosić równo 64" + +#: option.c:2590 option.c:2638 msgid "bad hex constant" msgstr "zapis niezgodny z formatem szesnastkowym" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "--dhcp-host nie dopuszcza dopasowywania na podstawie znaczników" -#: option.c:2589 +#: option.c:2660 #, c-format msgid "duplicate dhcp-host IP address %s" msgstr "powtórzony adres IP %s w specyfikacji dhcp-host" -#: option.c:2645 +#: option.c:2716 msgid "bad DHCP host name" msgstr "niedopuszczalna nazwa komputera w dhcp-host" -#: option.c:2727 +#: option.c:2798 msgid "bad tag-if" msgstr "nieprawidÅ‚owa skÅ‚adnia 'tag-if'" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "nieprawidÅ‚owy numer portu" -#: option.c:3113 +#: option.c:3184 msgid "bad dhcp-proxy address" msgstr "zÅ‚y adres dhcp-proxy" -#: option.c:3124 +#: option.c:3210 +#, fuzzy +msgid "Bad dhcp-relay" +msgstr "nieprawidÅ‚owy zakres dhcp-range" + +#: option.c:3220 msgid "bad DUID" msgstr "zÅ‚y DUID" -#: option.c:3166 +#: option.c:3262 msgid "invalid alias range" msgstr "nieprawidÅ‚owy zakres adresów w --alias" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "zÅ‚a CNAME" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "powtórzona CNAME" -#: option.c:3230 +#: option.c:3330 msgid "bad PTR record" msgstr "nieprawidÅ‚owy zapis rekordu PTR" -#: option.c:3261 +#: option.c:3361 msgid "bad NAPTR record" msgstr "nieprawidÅ‚owy zapis rekordu NAPTR" -#: option.c:3295 +#: option.c:3395 msgid "bad RR record" msgstr "nieprawidÅ‚owy zapis rekordu RR" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "nieprawidÅ‚owy zapis rekordu TXT" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "nieprawidÅ‚owy zapis rekordu SRV" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "nieprawidÅ‚owa wartość celu SRV" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "nieprawidÅ‚owy priorytet" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "nieprawidÅ‚owa waga" -#: option.c:3417 +#: option.c:3517 msgid "Bad host-record" msgstr "nieprawidÅ‚owy zapis host-record" -#: option.c:3434 +#: option.c:3534 msgid "Bad name in host-record" msgstr "niedopuszczalna nazwa w host-record" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "nieobsÅ‚ugiwana opcja (sprawdź, czy obsÅ‚uga DHCP/TFTP/DBus zostaÅ‚a wkompilowana)" -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "brakuje \"" -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "nieprawidÅ‚owa opcja" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "nadwyżkowy parametr" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "brak parametru" -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "błąd" -#: option.c:3592 +#: option.c:3692 #, c-format msgid " at line %d of %s" msgstr " w linii %d pliku %s" -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "błąd odczytu z pliku %s: %s" -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, c-format msgid "read %s" msgstr "przeczytaÅ‚em %s" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "jakieÅ› Å›mieci w linii poleceÅ„" -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Dnsmasq, wersja %s %s\n" -#: option.c:3951 +#: option.c:4051 #, c-format msgid "" "Compile time options: %s\n" @@ -920,62 +945,62 @@ msgstr "" "Wkompilowane opcje %s\n" "\n" -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Autor nie daje Å»ADNYCH GWARANCJI egzekwowalnych prawnie.\n" -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "Dnsmasq jest wolnym oprogramowaniem, możesz go rozprowadzać\n" -#: option.c:3954 +#: option.c:4054 #, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "na warunkach okreÅ›lonych w GNU General Public Licence, w wersji 2 lub 3.\n" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "spróbuj: --help" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "spróbuj: -w" -#: option.c:3969 +#: option.c:4069 #, c-format msgid "bad command line options: %s" msgstr "nieprawidÅ‚owa opcja w linii poleceÅ„ %s" -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "nie można pobrać nazwy hosta: %s" -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "w trybie no-poll można wskazać najwyżej jeden plik resolv.conf." -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "musisz mieć dokÅ‚adnie jeden plik resolv.conf do odczytu domen." -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, c-format msgid "failed to read %s: %s" msgstr "nie udaÅ‚o siÄ™ odczytać %s: %s" -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "brak wytycznych wyszukiwania w %s" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "w przypadku używania --dhcp-fqdn trzeba wskazać domyÅ›lnÄ… domenÄ™" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "skÅ‚adnia sprawdzona, jest prawidÅ‚owa" @@ -994,101 +1019,106 @@ msgstr "serwer nazw %s odmawia wykonania zapytania rekurencyjnego" msgid "possible DNS-rebind attack detected: %s" msgstr "prawdopodobnie wykryto atak DNS-rebind: %s" -#: network.c:414 +#: forward.c:1216 +#, fuzzy, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "Maksymalna liczba jednoczeÅ›nie obsÅ‚ugiwanych zapytaÅ„ DNS (domyÅ›lnie: %s)" + +#: network.c:551 #, c-format msgid "failed to create listening socket for %s: %s" msgstr "nie udaÅ‚o siÄ™ otworzyć gniazda %s: %s" -#: network.c:743 +#: network.c:882 #, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "interfejs %s nie pozwoliÅ‚ siÄ™ przyłączyć do grupy rozgÅ‚oszeniowej DHCPv6: %s" -#: network.c:937 +#: network.c:1076 #, c-format msgid "failed to bind server socket for %s: %s" msgstr "błąd przy przyznawaniu nazwy gniazdu serwera %s: %s" -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "ignorowanie serwera nazw %s - interfejs lokalny" -#: network.c:985 +#: network.c:1124 #, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "ignorowanie serwera nazw %s - nie można utworzyć/dowiÄ…zać gniazda: %s" -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "niekwalifikowane(-a)" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "nazwy" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "domyÅ›lne" -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "domeny" -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "używam adresów lokalnych tylko dla %s %s" -#: network.c:1011 +#: network.c:1150 #, c-format msgid "using standard nameservers for %s %s" msgstr "używam standardowych serwerów nazw dla %s %s" -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "używam serwera nazw %s#%d dla %s %s" -#: network.c:1016 +#: network.c:1155 #, c-format msgid "using nameserver %s#%d(via %s)" msgstr "używam serwera nazw %s#%d (przez %s)" -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "używam serwera nazw %s#%d" -#: dnsmasq.c:131 +#: dnsmasq.c:134 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "Serwer TFTP nie zostaÅ‚ wkompilowany -- ustaw HAVE_TFTP w src/config.h" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "--conntrack i --query-port wykluczajÄ… siÄ™ wzajemnie" -#: dnsmasq.c:139 +#: dnsmasq.c:142 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "Wsparcie dla przekazywania znaczników połączeÅ„ (conntrack) nie zostaÅ‚o wkompilowane - ustaw HAVE_CONNTRACK w src/config.h" -#: dnsmasq.c:144 +#: dnsmasq.c:147 msgid "asychronous logging is not available under Solaris" msgstr "zapis do logów w trybie asynchronicznym nie jest dostÄ™pny w Solarisie" -#: dnsmasq.c:149 +#: dnsmasq.c:152 msgid "asychronous logging is not available under Android" msgstr "zapis do logów w trybie asynchronicznym nie jest dostÄ™pny w Androidzie" -#: dnsmasq.c:154 +#: dnsmasq.c:157 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "tryb autorytatywny DNS-a niedostÄ™pny - ustaw HAVE_AUTH w src/config.h" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "za pomocÄ… --auth-soa musi zostać ustawiony numer seryjny strefy" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "konstrukcja dhcp-range nie jest dostÄ™pna w tym systemie" @@ -1106,426 +1136,431 @@ msgstr "błąd podczas tworzenia listy interfejsów sieciowych: %s" msgid "unknown interface %s" msgstr "nieznany interfejs %s" -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "błąd DBus: %s" -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "ObsÅ‚uga DBus nie zostaÅ‚a wkompilowana -- ustaw HAVE_DBUS w src/config.h" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "nieznany użytkownik lub grupa: %s" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "nie potrafiÄ™ wejść do głównego katalogu: %s" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, c-format msgid "started, version %s DNS disabled" msgstr "uruchomiony, wersja %s, DNS wyłączony" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "uruchomiony, wersja %s, %d miejsc w pamiÄ™ci podrÄ™cznej" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "uruchomiony, wersja %s, pamięć podrÄ™czna wyłączona" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "opcje kompilacji: %s" -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "obsÅ‚uga DBus włączona, podłączono do serwera DBus" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "obsÅ‚uga DBus włączona, trwa podłączanie do serwera DBus" -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, c-format msgid "warning: failed to change owner of %s: %s" msgstr "UWAGA! Nie udaÅ‚o siÄ™ zmienić użytkownika pliku %s: %s" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "ustawiam --bind-interfaces z powodu ograniczeÅ„ systemu operacyjnego" -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "uwaga: interfejs %s nie jest włączony" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "uwaga: ignorujÄ™ opcjÄ™ resolv-file, ponieważ wybrano tryb no-resolv" -#: dnsmasq.c:633 +#: dnsmasq.c:634 msgid "warning: no upstream servers configured" msgstr "uwaga: nie wskazano nadrzÄ™dnych serwerów DNS" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "włączono asynchroniczny tryb zapisu do logów z kolejkÄ… na %d komunikatów" -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "anonsowanie routera IPv4 włączone" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "z głównym katalogiem w " -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "enabled" msgstr "włączony" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "w trybie bezpiecznym" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "ograniczam ilość jednoczesnych przesÅ‚aÅ„ TFTP do %d" -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "podłączono do DBus-a" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "nie potrafiÄ™ przełączyć siÄ™ do pracy w tle: %s" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, c-format msgid "failed to create helper: %s" msgstr "nie udaÅ‚o siÄ™ utworzyć procesu pomocniczego: %s" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, c-format msgid "setting capabilities failed: %s" msgstr "nie powiodÅ‚o siÄ™ ustawianie ograniczeÅ„ (capabilities): %s" -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, c-format msgid "failed to change user-id to %s: %s" msgstr "nie udaÅ‚o siÄ™ zmienić użytkownika procesu na %s: %s" -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, c-format msgid "failed to change group-id to %s: %s" msgstr "nie udaÅ‚o siÄ™ zmienić grupy procesu na %s: %s" -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, c-format msgid "failed to open pidfile %s: %s" msgstr "nie udaÅ‚o siÄ™ otworzyć pliku z PID-em %s: %s" -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, c-format msgid "cannot open log %s: %s" msgstr "nie udaÅ‚o siÄ™ otworzyć logu %s: %s" -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, c-format msgid "failed to load Lua script: %s" msgstr "nie udaÅ‚o siÄ™ wczytać skryptu Lua: %s" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "katalog TFTP %s nie jest dostÄ™pny: %s" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, c-format msgid "script process killed by signal %d" msgstr "skrypt zostaÅ‚ zabity sygnaÅ‚em %d" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, c-format msgid "script process exited with status %d" msgstr "skrypt zakoÅ„czyÅ‚ siÄ™ z kodem powrotu %d" -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, c-format msgid "failed to execute %s: %s" msgstr "nie udaÅ‚o siÄ™ uruchomić %s: %s" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "zakoÅ„czyÅ‚em dziaÅ‚anie z powodu odebrania SIGTERM" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, c-format msgid "failed to access %s: %s" msgstr "brak dostÄ™pu do %s: %s" -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "czytanie %s" -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, c-format msgid "no servers found in %s, will retry" msgstr "w %s nie znalazÅ‚em serwerów, spróbujÄ™ ponownie później" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "nie udaÅ‚o siÄ™ utworzyć gniazda dla DHCP: %s" -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "błąd podczas ustawiania opcji gniazda DHCP: %s" -#: dhcp.c:77 +#: dhcp.c:89 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "nie udaÅ‚o siÄ™ ustawić SO_REUSE{ADDR|PORT} gniazda DHCP: %s" -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "błąd przy przyznawaniu nazwy gniazdu serwera DHCP: %s" -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "nie udaÅ‚o siÄ™ utworzyć surowego gniazda ICMP: %s." -#: dhcp.c:225 +#: dhcp.c:239 #, c-format msgid "unknown interface %s in bridge-interface" msgstr "nieznany interfejs %s w bridge-u" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "żądanie DHCP odebrano na interfejsie %s, który nie ma adresu" -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "zakres adresów DHCP %s -- %s jest niespójny z maskÄ… sieci %s" -#: dhcp.c:832 +#: dhcp.c:806 #, c-format msgid "bad line at %s line %d" msgstr "zÅ‚a zawartość pliku %s, w linii %d" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "w %s pomijam liniÄ™ %d -- powtórzona nazwa lub adres IP" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + #: lease.c:61 #, c-format msgid "cannot open or create lease file %s: %s" msgstr "nie potrafiÄ™ otworzyć albo utworzyć pliku dzierżaw %s: %s" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "zbyt duża ilość zapisanych dzierżaw" -#: lease.c:164 +#: lease.c:165 #, c-format msgid "cannot run lease-init script %s: %s" msgstr "nie potrafiÄ™ uruchomić skryptu %s: %s" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "skrypt zakoÅ„czyÅ‚ siÄ™ z kodem powrotu %s" -#: lease.c:339 +#: lease.c:342 #, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "błąd zapisu do %s: %s (spróbujÄ™ ponownie za %us)" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "Nie uwzglÄ™dniam części domenowej (%s) dla komputera %s" -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania %s %s" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "z wyborem podsieci" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "przez" -#: rfc2131.c:350 +#: rfc2131.c:351 #, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "%u dostÄ™pna podsieć DHCP: %s/%s" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, c-format msgid "%u available DHCP range: %s -- %s" msgstr "%u dostÄ™pny zakres adresów DHCP: %s -- %s" -#: rfc2131.c:382 -msgid "disabled" -msgstr "wyłączony(a)" - -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "ignorujÄ™" - -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "adres jest w użyciu" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "brak dostÄ™pnego adresu" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "nieprawidÅ‚owa sieć" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "brak skonfigurowanego adresu" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "brak wolnych dzierżaw" - -#: rfc2131.c:576 rfc3315.c:428 -#, c-format -msgid "%u client provides name: %s" -msgstr "klient %u przedstawia siÄ™ jako %s" - -#: rfc2131.c:731 +#: rfc2131.c:465 #, c-format msgid "%u vendor class: %s" msgstr "%u klasa dostawcy: %s" -#: rfc2131.c:733 +#: rfc2131.c:467 #, c-format msgid "%u user class: %s" msgstr "%u klasa użytkownika: %s" +#: rfc2131.c:494 +msgid "disabled" +msgstr "wyłączony(a)" + +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "ignorujÄ™" + +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "adres jest w użyciu" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "brak dostÄ™pnego adresu" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "nieprawidÅ‚owa sieć" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "brak skonfigurowanego adresu" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "brak wolnych dzierżaw" + +#: rfc2131.c:687 rfc3315.c:466 +#, c-format +msgid "%u client provides name: %s" +msgstr "klient %u przedstawia siÄ™ jako %s" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "PXE BIS nie jest obsÅ‚ugiwane" -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "wyłączam statyczne przypisanie adresu %s dla %s" -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "nieznana dzierżawa" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "nie proponujÄ™ zakÅ‚adanego w konfiguracji adresu %s, bo jest on już wydzierżawiony komputerowi %s" -#: rfc2131.c:986 +#: rfc2131.c:994 #, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "nie proponujÄ™ zakÅ‚adanego w konfiguracji adresu %s, bo używa go któryÅ› z serwerów" -#: rfc2131.c:989 +#: rfc2131.c:997 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "nie proponujÄ™ zakÅ‚adanego w konfiguracji adresu %s, bo już poprzednio zostaÅ‚ odrzucony" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "brak unikalnego id" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "nieprawidÅ‚owy identyfikator serwera (server-ID)" -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "błędny adres" -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "dzierżawa nieznaleziona" -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "adres niedostÄ™pny" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "dostÄ™pna statyczna dzierżawa" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "adres zarezerwowany" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "porzucam przypisanie do %s nazwy %s" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "%u nazwa pliku bootowania: %s" -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, c-format msgid "%u server name: %s" msgstr "%u nazwa serwera: %s" -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, c-format msgid "%u next server: %s" msgstr "%u nastÄ™pny serwer: %s" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "%u odpowiedź rozgÅ‚oszeniowa" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "nie mam możliwoÅ›ci wysÅ‚ania opcji %d DHCP/BOOTP: niedostateczna ilość miejsca w pakiecie" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "menu PXE zbyt duże" -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, c-format msgid "%u requested options: %s" msgstr "%u zażądano: %s" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "nie mogÄ™ wysÅ‚ać opcji RFC3925: za dÅ‚ugi Å‚aÅ„cuch opcji przy numerze %d" @@ -1535,7 +1570,7 @@ msgstr "nie mogÄ™ wysÅ‚ać opcji RFC3925: za dÅ‚ugi Å‚aÅ„cuch opcji przy numerze msgid "cannot create netlink socket: %s" msgstr "nie potrafiÄ™ utworzyć połączenia netlink %s" -#: netlink.c:354 +#: netlink.c:363 #, c-format msgid "netlink returns error: %s" msgstr "wystÄ…piÅ‚ błąd w połączeniu netlink %s" @@ -1544,53 +1579,53 @@ msgstr "wystÄ…piÅ‚ błąd w połączeniu netlink %s" msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "próba ustawienia adresu IPv6 serwera przez DBus, ale brak obsÅ‚ugi IPv6" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "ustawiam adresy serwerów nadrzÄ™dnych na podstawie informacji odebranych z DBus" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "nie można zarejestrować uchwytu DBus" -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "nie potrafiÄ™ utworzyć gniazda DHCP BPF: %s" -#: bpf.c:225 +#: bpf.c:273 #, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "żądanie DHCP od urzÄ…dzenia nieobsÅ‚ugiwanego typu (%d) odebrano na %s" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "w skrypcie Lua brak funkcji lease()" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "brak wolnego portu dla usÅ‚ugi TFTP" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "nieobsÅ‚ugiwane żądanie od komputera %s" -#: tftp.c:420 +#: tftp.c:433 #, c-format msgid "file %s not found" msgstr "plik %s nie zostaÅ‚ znaleziony" -#: tftp.c:529 +#: tftp.c:542 #, c-format msgid "error %d %s received from %s" msgstr "błąd %d %s odebrano od %s" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "failed sending %s to %s" msgstr "błąd wysyÅ‚ania pliku %s do komputera %s" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "sent %s to %s" msgstr "plik %s przesÅ‚ano do %s" @@ -1614,176 +1649,195 @@ msgstr "BÅ�Ä„D: nie udaÅ‚o siÄ™ uruchomić dnsmasq-a" msgid "Conntrack connection mark retrieval failed: %s" msgstr "Nie udaÅ‚o siÄ™ odcztać znacznika połączenia (conntrack): %s" -#: dhcp6.c:49 +#: dhcp6.c:59 #, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "nie udaÅ‚o siÄ™ utworzyć gniazda dla DHCPv6: %s" -#: dhcp6.c:62 +#: dhcp6.c:80 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "nie udaÅ‚o siÄ™ ustawić SO_REUSE{ADDR|PORT} gniazda DHCPv6: %s" -#: dhcp6.c:74 +#: dhcp6.c:92 #, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "dowiÄ…zywanie gniazda serwera DHCPv6 zakoÅ„czone niepowodzeniem: %s" -#: rfc3315.c:135 +#: rfc3315.c:149 #, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania DHCPv6 przekazanego przez %s" -#: rfc3315.c:144 +#: rfc3315.c:158 #, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania DHCPv6 od %s" -#: rfc3315.c:269 +#: rfc3315.c:289 #, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "%u dostÄ™pna podsieć DHCPv6: %s/%d" -#: rfc3315.c:350 +#: rfc3315.c:370 #, c-format msgid "%u vendor class: %u" msgstr "%u klasa dostawcy: %u" -#: rfc3315.c:609 +#: rfc3315.c:418 +#, fuzzy, c-format +msgid "%u client MAC address: %s" +msgstr "klient %u przedstawia siÄ™ jako %s" + +#: rfc3315.c:650 #, c-format msgid "unknown prefix-class %d" msgstr "nieznana klasa sieci %d" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "udane" -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 msgid "no addresses available" msgstr "brak wolnych adresów" -#: rfc3315.c:806 +#: rfc3315.c:855 msgid "address unavailable" msgstr "adres niedostÄ™pny" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "poza zasiÄ™giem" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "brak powiÄ…zania" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "przestarzaÅ‚y" -#: rfc3315.c:951 +#: rfc3315.c:1006 msgid "address invalid" msgstr "niepoprawny adres" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "brak potwierdzenia" -#: rfc3315.c:1003 +#: rfc3315.c:1059 msgid "all addresses still on link" msgstr "wszystkie adresy ciÄ…gle w użyciu" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "adres zostaÅ‚ zwolniony" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "Pomijam powtórzonÄ… dhcp-option %d" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "%u cechy: %s" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "do komputera o nazwie %s pasuje wiÄ™cej niż jeden adres, w odpowiedzi DHCP wysyÅ‚am %s" -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "powtórzenie adresu IP %s (%s) w opcji dhcp-config" -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "nie udaÅ‚o siÄ™ ustawić SO_BINDTODEVICE gniazda DHCP: %s" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "Znane opcje DHCP:\n" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, c-format msgid "Known DHCPv6 options:\n" msgstr "Rozpoznawane opcje DHCPv6:\n" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr ", przestarzaÅ‚y prefiks" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr ", czas dzierżawy" -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "%s bezstanowy na %s%.0s%.0s%s" -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "%s, wyłącznie statyczne dzierżawy na %.0s%s%s%.0s" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "%s, wykryto poÅ›rednika na podsieci %.0s%s%.0s%.0s" -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "%s, zakres IP %s -- %s%s%.0s" -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "pochodzÄ…ce z DHCPv4 nazwy IPv6 na %s%s" -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, c-format msgid "router advertisement on %s%s" msgstr "anonsowanie routera na %s%s" -#: radv.c:87 +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + +#: radv.c:93 #, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "nie udaÅ‚o siÄ™ utworzyć gniazda dla ICMPv6: %s" -#: auth.c:402 +#: auth.c:435 #, c-format msgid "ignoring zone transfer request from %s" msgstr "ignorujÄ™ żądanie transferu strefy od %s" -#: ipset.c:71 +#: ipset.c:95 #, c-format msgid "failed to find kernel version: %s" msgstr "niezgodna wersja jÄ…dra: %s" -#: ipset.c:90 +#: ipset.c:114 #, c-format msgid "failed to create IPset control socket: %s" msgstr "nie powiodÅ‚o siÄ™ otwieranie gniazda sterujÄ…cego IPset: %s" diff --git a/po/pt_BR.po b/po/pt_BR.po index 824a78f..3abae37 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -21,17 +21,17 @@ msgstr "" msgid "failed to load names from %s: %s" msgstr "" -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, c-format msgid "bad address at %s line %d" msgstr "" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "" @@ -40,37 +40,37 @@ msgstr "" msgid "cleared cache" msgstr "" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "" -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "" -#: cache.c:1163 +#: cache.c:1131 #, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "" -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "" @@ -80,893 +80,913 @@ msgstr "" msgid "failed to seed the random number generator: %s" msgstr "" -#: util.c:189 +#: util.c:192 msgid "failed to allocate memory" msgstr "" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "" -#: util.c:237 +#: util.c:240 #, c-format msgid "cannot create pipe: %s" msgstr "" -#: util.c:245 +#: util.c:248 #, c-format msgid "failed to allocate %d bytes" msgstr "" -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "" -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "" -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "" -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "" -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "" -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "" -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "" -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "" -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "" -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "" -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "" -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "" -#: option.c:297 -msgid "Enable DHCP in the range given with lease duration." -msgstr "" - -#: option.c:298 -#, c-format -msgid "Change to this group after startup (defaults to %s)." -msgstr "" - -#: option.c:299 -msgid "Set address or hostname for a specified machine." -msgstr "" - -#: option.c:300 -msgid "Read DHCP host specs from file." -msgstr "" - -#: option.c:301 -msgid "Read DHCP option specs from file." -msgstr "" - -#: option.c:302 -msgid "Evaluate conditional tag expression." -msgstr "" - #: option.c:303 -#, c-format -msgid "Do NOT load %s file." +msgid "Enable DHCP in the range given with lease duration." msgstr "" #: option.c:304 #, c-format -msgid "Specify a hosts file to be read in addition to %s." +msgid "Change to this group after startup (defaults to %s)." msgstr "" #: option.c:305 -msgid "Specify interface(s) to listen on." +msgid "Set address or hostname for a specified machine." msgstr "" #: option.c:306 -msgid "Specify interface(s) NOT to listen on." +msgid "Read DHCP host specs from file." msgstr "" #: option.c:307 -msgid "Map DHCP user class to tag." +msgid "Read DHCP option specs from file." msgstr "" #: option.c:308 -msgid "Map RFC3046 circuit-id to tag." +msgid "Evaluate conditional tag expression." msgstr "" #: option.c:309 -msgid "Map RFC3046 remote-id to tag." +#, c-format +msgid "Do NOT load %s file." msgstr "" #: option.c:310 -msgid "Map RFC3993 subscriber-id to tag." +#, c-format +msgid "Specify a hosts file to be read in addition to %s." msgstr "" #: option.c:311 -msgid "Don't do DHCP for hosts with tag set." +msgid "Specify interface(s) to listen on." msgstr "" #: option.c:312 -msgid "Force broadcast replies for hosts with tag set." +msgid "Specify interface(s) NOT to listen on." msgstr "" #: option.c:313 -msgid "Do NOT fork into the background, do NOT run in debug mode." +msgid "Map DHCP user class to tag." msgstr "" #: option.c:314 -msgid "Assume we are the only DHCP server on the local network." +msgid "Map RFC3046 circuit-id to tag." msgstr "" #: option.c:315 -#, c-format -msgid "Specify where to store DHCP leases (defaults to %s)." +msgid "Map RFC3046 remote-id to tag." msgstr "" #: option.c:316 -msgid "Return MX records for local hosts." +msgid "Map RFC3993 subscriber-id to tag." msgstr "" #: option.c:317 -msgid "Specify an MX record." +msgid "Don't do DHCP for hosts with tag set." msgstr "" #: option.c:318 -msgid "Specify BOOTP options to DHCP server." +msgid "Force broadcast replies for hosts with tag set." msgstr "" #: option.c:319 -#, c-format -msgid "Do NOT poll %s file, reload only on SIGHUP." +msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "" #: option.c:320 -msgid "Do NOT cache failed search results." +msgid "Assume we are the only DHCP server on the local network." msgstr "" #: option.c:321 #, c-format -msgid "Use nameservers strictly in the order given in %s." +msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "" #: option.c:322 -msgid "Specify options to be sent to DHCP clients." +msgid "Return MX records for local hosts." msgstr "" #: option.c:323 -msgid "DHCP option sent even if the client does not request it." +msgid "Specify an MX record." msgstr "" #: option.c:324 -msgid "Specify port to listen for DNS requests on (defaults to 53)." +msgid "Specify BOOTP options to DHCP server." msgstr "" #: option.c:325 #, c-format -msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." +msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "" #: option.c:326 -msgid "Log DNS queries." +msgid "Do NOT cache failed search results." msgstr "" #: option.c:327 -msgid "Force the originating port for upstream DNS queries." +#, c-format +msgid "Use nameservers strictly in the order given in %s." msgstr "" #: option.c:328 -msgid "Do NOT read resolv.conf." +msgid "Specify options to be sent to DHCP clients." msgstr "" #: option.c:329 +msgid "DHCP option sent even if the client does not request it." +msgstr "" + +#: option.c:330 +msgid "Specify port to listen for DNS requests on (defaults to 53)." +msgstr "" + +#: option.c:331 +#, c-format +msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." +msgstr "" + +#: option.c:332 +msgid "Log DNS queries." +msgstr "" + +#: option.c:333 +msgid "Force the originating port for upstream DNS queries." +msgstr "" + +#: option.c:334 +msgid "Do NOT read resolv.conf." +msgstr "" + +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "" -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "" -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "" -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "" -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "" -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "" -#: option.c:335 +#: option.c:341 msgid "Specify time-to-live in seconds for negative caching." msgstr "" -#: option.c:336 -msgid "Specify time-to-live in seconds for maximum TTL to send to clients." -msgstr "" - -#: option.c:337 -#, c-format -msgid "Change to this user after startup. (defaults to %s)." -msgstr "" - -#: option.c:338 -msgid "Map DHCP vendor class to tag." -msgstr "" - -#: option.c:339 -msgid "Display dnsmasq version and copyright information." -msgstr "" - -#: option.c:340 -msgid "Translate IPv4 addresses from upstream servers." -msgstr "" - -#: option.c:341 -msgid "Specify a SRV record." -msgstr "" - #: option.c:342 -msgid "Display this message. Use --help dhcp for known DHCP options." +msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "" #: option.c:343 #, c-format -msgid "Specify path of PID file (defaults to %s)." +msgid "Change to this user after startup. (defaults to %s)." msgstr "" #: option.c:344 -#, c-format -msgid "Specify maximum number of DHCP leases (defaults to %s)." +msgid "Map DHCP vendor class to tag." msgstr "" #: option.c:345 -msgid "Answer DNS queries based on the interface a query was sent to." +msgid "Display dnsmasq version and copyright information." msgstr "" #: option.c:346 -msgid "Specify TXT DNS record." +msgid "Translate IPv4 addresses from upstream servers." msgstr "" #: option.c:347 -msgid "Specify PTR DNS record." +msgid "Specify a SRV record." msgstr "" #: option.c:348 -msgid "Give DNS name to IPv4 address of interface." +msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "" #: option.c:349 -msgid "Bind only to interfaces in use." +#, c-format +msgid "Specify path of PID file (defaults to %s)." msgstr "" #: option.c:350 #, c-format -msgid "Read DHCP static host information from %s." +msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "" #: option.c:351 -msgid "Enable the DBus interface for setting upstream servers, etc." +msgid "Answer DNS queries based on the interface a query was sent to." msgstr "" #: option.c:352 -msgid "Do not provide DHCP on this interface, only provide DNS." +msgid "Specify TXT DNS record." msgstr "" #: option.c:353 -msgid "Enable dynamic address allocation for bootp." +msgid "Specify PTR DNS record." msgstr "" #: option.c:354 -msgid "Map MAC address (with wildcards) to option set." +msgid "Give DNS name to IPv4 address of interface." msgstr "" #: option.c:355 -msgid "Treat DHCP requests on aliases as arriving from interface." +msgid "Bind only to interfaces in use." msgstr "" #: option.c:356 -msgid "Disable ICMP echo address checking in the DHCP server." +#, c-format +msgid "Read DHCP static host information from %s." msgstr "" #: option.c:357 -msgid "Shell script to run on DHCP lease creation and destruction." +msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "" #: option.c:358 -msgid "Lua script to run on DHCP lease creation and destruction." +msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "" #: option.c:359 -msgid "Run lease-change scripts as this user." +msgid "Enable dynamic address allocation for bootp." msgstr "" #: option.c:360 -msgid "Read configuration from all the files in this directory." +msgid "Map MAC address (with wildcards) to option set." msgstr "" #: option.c:361 -msgid "Log to this syslog facility or file. (defaults to DAEMON)" +msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "" #: option.c:362 -msgid "Do not use leasefile." +msgid "Disable ICMP echo address checking in the DHCP server." msgstr "" #: option.c:363 +msgid "Shell script to run on DHCP lease creation and destruction." +msgstr "" + +#: option.c:364 +msgid "Lua script to run on DHCP lease creation and destruction." +msgstr "" + +#: option.c:365 +msgid "Run lease-change scripts as this user." +msgstr "" + +#: option.c:366 +msgid "Read configuration from all the files in this directory." +msgstr "" + +#: option.c:367 +msgid "Log to this syslog facility or file. (defaults to DAEMON)" +msgstr "" + +#: option.c:368 +msgid "Do not use leasefile." +msgstr "" + +#: option.c:369 #, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "" -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "" -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "" -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "" -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "" -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "" -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "" -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "" -#: option.c:371 +#: option.c:377 #, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "" -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "" -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "" -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "" -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "" -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "" -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "" -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "" -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "" -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "" -#: option.c:382 +#: option.c:388 msgid "Use alternative ports for DHCP." msgstr "" -#: option.c:383 +#: option.c:389 msgid "Specify NAPTR DNS record." msgstr "" -#: option.c:384 +#: option.c:390 msgid "Specify lowest port available for DNS query transmission." msgstr "" -#: option.c:385 +#: option.c:391 msgid "Use only fully qualified domain names for DHCP clients." msgstr "" -#: option.c:386 +#: option.c:392 msgid "Generate hostnames based on MAC address for nameless clients." msgstr "" -#: option.c:387 +#: option.c:393 msgid "Use these DHCP relays as full proxies." msgstr "" -#: option.c:388 -msgid "Specify alias name for LOCAL DNS name." -msgstr "" - -#: option.c:389 -msgid "Prompt to send to PXE clients." -msgstr "" - -#: option.c:390 -msgid "Boot service for PXE menu." -msgstr "" - -#: option.c:391 -msgid "Check configuration syntax." -msgstr "" - -#: option.c:392 -msgid "Add requestor's MAC address to forwarded DNS queries." -msgstr "" - -#: option.c:393 -msgid "Proxy DNSSEC validation results from upstream nameservers." -msgstr "" - #: option.c:394 -msgid "Attempt to allocate sequential IP addresses to DHCP clients." +msgid "Relay DHCP requests to a remote server" msgstr "" #: option.c:395 -msgid "Copy connection-track mark from queries to upstream connections." +msgid "Specify alias name for LOCAL DNS name." msgstr "" #: option.c:396 -msgid "Allow DHCP clients to do their own DDNS updates." +msgid "Prompt to send to PXE clients." msgstr "" #: option.c:397 -msgid "Send router-advertisements for interfaces doing DHCPv6" +msgid "Boot service for PXE menu." msgstr "" #: option.c:398 -msgid "Specify DUID_EN-type DHCPv6 server DUID" +msgid "Check configuration syntax." msgstr "" #: option.c:399 -msgid "Specify host (A/AAAA and PTR) records" +msgid "Add requestor's MAC address to forwarded DNS queries." msgstr "" #: option.c:400 -msgid "Specify arbitrary DNS resource record" +msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "" #: option.c:401 -msgid "Bind to interfaces in use - check for new interfaces" +msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "" #: option.c:402 -msgid "Export local names to global DNS" +msgid "Copy connection-track mark from queries to upstream connections." msgstr "" #: option.c:403 -msgid "Domain to export to global DNS" +msgid "Allow DHCP clients to do their own DDNS updates." msgstr "" #: option.c:404 -msgid "Set TTL for authoritative replies" +msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "" #: option.c:405 -msgid "Set authoritive zone information" +msgid "Always send frequent router-advertisements" msgstr "" #: option.c:406 -msgid "Secondary authoritative nameservers for forward domains" +msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "" #: option.c:407 -msgid "Peers which are allowed to do zone transfer" +msgid "Specify host (A/AAAA and PTR) records" msgstr "" #: option.c:408 -msgid "Specify ipsets to which matching domains should be added" +msgid "Specify arbitrary DNS resource record" +msgstr "" + +#: option.c:409 +msgid "Bind to interfaces in use - check for new interfaces" msgstr "" #: option.c:410 +msgid "Export local names to global DNS" +msgstr "" + +#: option.c:411 +msgid "Domain to export to global DNS" +msgstr "" + +#: option.c:412 +msgid "Set TTL for authoritative replies" +msgstr "" + +#: option.c:413 +msgid "Set authoritive zone information" +msgstr "" + +#: option.c:414 +msgid "Secondary authoritative nameservers for forward domains" +msgstr "" + +#: option.c:415 +msgid "Peers which are allowed to do zone transfer" +msgstr "" + +#: option.c:416 +msgid "Specify ipsets to which matching domains should be added" +msgstr "" + +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "" -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" "\n" msgstr "" -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "" -#: option.c:600 +#: option.c:609 #, c-format msgid "Valid options are:\n" msgstr "" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "" -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 msgid "bad interface name" msgstr "" -#: option.c:720 +#: option.c:729 msgid "bad address" msgstr "" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "" -#: option.c:929 +#: option.c:945 msgid "bad IP address" msgstr "" -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 msgid "bad IPv6 address" msgstr "" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "" -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, c-format msgid "cannot access directory %s: %s" msgstr "" -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, c-format msgid "cannot access %s: %s" msgstr "" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "" -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "" -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "" -#: option.c:1521 +#: option.c:1537 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "" -#: option.c:1631 +#: option.c:1739 option.c:1800 msgid "bad prefix" msgstr "" -#: option.c:2043 +#: option.c:2094 msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "" -#: option.c:2223 +#: option.c:2274 msgid "bad port range" msgstr "" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "" -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "" -#: option.c:2402 -msgid "prefix must be exactly 64 for RA subnets" +#: option.c:2459 +msgid "prefix length must be exactly 64 for RA subnets" msgstr "" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" +#: option.c:2461 +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "" -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2465 +msgid "prefix length must be at least 64" msgstr "" -#: option.c:2412 +#: option.c:2468 msgid "inconsistent DHCPv6 range" msgstr "" -#: option.c:2519 option.c:2567 +#: option.c:2479 +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "" + +#: option.c:2590 option.c:2638 msgid "bad hex constant" msgstr "" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "" -#: option.c:2589 +#: option.c:2660 #, c-format msgid "duplicate dhcp-host IP address %s" msgstr "" -#: option.c:2645 +#: option.c:2716 msgid "bad DHCP host name" msgstr "" -#: option.c:2727 +#: option.c:2798 msgid "bad tag-if" msgstr "" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "" -#: option.c:3113 +#: option.c:3184 msgid "bad dhcp-proxy address" msgstr "" -#: option.c:3124 +#: option.c:3210 +msgid "Bad dhcp-relay" +msgstr "" + +#: option.c:3220 msgid "bad DUID" msgstr "" -#: option.c:3166 +#: option.c:3262 msgid "invalid alias range" msgstr "" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "" -#: option.c:3230 +#: option.c:3330 msgid "bad PTR record" msgstr "" -#: option.c:3261 +#: option.c:3361 msgid "bad NAPTR record" msgstr "" -#: option.c:3295 +#: option.c:3395 msgid "bad RR record" msgstr "" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "" -#: option.c:3417 +#: option.c:3517 msgid "Bad host-record" msgstr "" -#: option.c:3434 +#: option.c:3534 msgid "Bad name in host-record" msgstr "" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "" -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "" -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "" -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "" -#: option.c:3592 +#: option.c:3692 #, c-format msgid " at line %d of %s" msgstr "" -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "" -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, c-format msgid "read %s" msgstr "" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "" -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "" -#: option.c:3951 +#: option.c:4051 #, c-format msgid "" "Compile time options: %s\n" "\n" msgstr "" -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "" -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "" -#: option.c:3954 +#: option.c:4054 #, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "" -#: option.c:3969 +#: option.c:4069 #, c-format msgid "bad command line options: %s" msgstr "" -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "" -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "" -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "" -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, c-format msgid "failed to read %s: %s" msgstr "" -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "" @@ -985,101 +1005,106 @@ msgstr "" msgid "possible DNS-rebind attack detected: %s" msgstr "" -#: network.c:414 +#: forward.c:1216 +#, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "" + +#: network.c:551 #, c-format msgid "failed to create listening socket for %s: %s" msgstr "" -#: network.c:743 +#: network.c:882 #, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "" -#: network.c:937 +#: network.c:1076 #, c-format msgid "failed to bind server socket for %s: %s" msgstr "" -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "" -#: network.c:985 +#: network.c:1124 #, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "" -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "" -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "" -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "" -#: network.c:1011 +#: network.c:1150 #, c-format msgid "using standard nameservers for %s %s" msgstr "" -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "" -#: network.c:1016 +#: network.c:1155 #, c-format msgid "using nameserver %s#%d(via %s)" msgstr "" -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "" -#: dnsmasq.c:131 +#: dnsmasq.c:134 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "" -#: dnsmasq.c:139 +#: dnsmasq.c:142 msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "" -#: dnsmasq.c:144 +#: dnsmasq.c:147 msgid "asychronous logging is not available under Solaris" msgstr "" -#: dnsmasq.c:149 +#: dnsmasq.c:152 msgid "asychronous logging is not available under Android" msgstr "" -#: dnsmasq.c:154 +#: dnsmasq.c:157 msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "" @@ -1097,426 +1122,431 @@ msgstr "" msgid "unknown interface %s" msgstr "" -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "" -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, c-format msgid "started, version %s DNS disabled" msgstr "" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "" -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "" -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, c-format msgid "warning: failed to change owner of %s: %s" msgstr "" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "" -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:633 +#: dnsmasq.c:634 msgid "warning: no upstream servers configured" msgstr "" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "" -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "enabled" msgstr "" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, c-format msgid "failed to create helper: %s" msgstr "" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, c-format msgid "setting capabilities failed: %s" msgstr "" -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, c-format msgid "failed to change user-id to %s: %s" msgstr "" -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, c-format msgid "failed to change group-id to %s: %s" msgstr "" -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, c-format msgid "failed to open pidfile %s: %s" msgstr "" -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, c-format msgid "cannot open log %s: %s" msgstr "" -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, c-format msgid "failed to load Lua script: %s" msgstr "" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, c-format msgid "script process killed by signal %d" msgstr "" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, c-format msgid "script process exited with status %d" msgstr "" -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, c-format msgid "failed to execute %s: %s" msgstr "" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, c-format msgid "failed to access %s: %s" msgstr "" -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "" -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, c-format msgid "no servers found in %s, will retry" msgstr "" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "" -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "" -#: dhcp.c:77 +#: dhcp.c:89 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "" -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "" -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "" -#: dhcp.c:225 +#: dhcp.c:239 #, c-format msgid "unknown interface %s in bridge-interface" msgstr "" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "" -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "" -#: dhcp.c:832 +#: dhcp.c:806 #, c-format msgid "bad line at %s line %d" msgstr "" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + #: lease.c:61 #, c-format msgid "cannot open or create lease file %s: %s" msgstr "" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "" -#: lease.c:164 +#: lease.c:165 #, c-format msgid "cannot run lease-init script %s: %s" msgstr "" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "" -#: lease.c:339 +#: lease.c:342 #, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "" -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "" -#: rfc2131.c:350 +#: rfc2131.c:351 #, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, c-format msgid "%u available DHCP range: %s -- %s" msgstr "" -#: rfc2131.c:382 -msgid "disabled" -msgstr "" - -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "" - -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "" - -#: rfc2131.c:576 rfc3315.c:428 -#, c-format -msgid "%u client provides name: %s" -msgstr "" - -#: rfc2131.c:731 +#: rfc2131.c:465 #, c-format msgid "%u vendor class: %s" msgstr "" -#: rfc2131.c:733 +#: rfc2131.c:467 #, c-format msgid "%u user class: %s" msgstr "" +#: rfc2131.c:494 +msgid "disabled" +msgstr "" + +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "" + +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "" + +#: rfc2131.c:687 rfc3315.c:466 +#, c-format +msgid "%u client provides name: %s" +msgstr "" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "" -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "" -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:986 +#: rfc2131.c:994 #, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:989 +#: rfc2131.c:997 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "" -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "" -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "" -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "" -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, c-format msgid "%u server name: %s" msgstr "" -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, c-format msgid "%u next server: %s" msgstr "" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "" -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, c-format msgid "%u requested options: %s" msgstr "" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "" @@ -1526,7 +1556,7 @@ msgstr "" msgid "cannot create netlink socket: %s" msgstr "" -#: netlink.c:354 +#: netlink.c:363 #, c-format msgid "netlink returns error: %s" msgstr "" @@ -1535,53 +1565,53 @@ msgstr "" msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "" -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "" -#: bpf.c:225 +#: bpf.c:273 #, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "" -#: tftp.c:420 +#: tftp.c:433 #, c-format msgid "file %s not found" msgstr "" -#: tftp.c:529 +#: tftp.c:542 #, c-format msgid "error %d %s received from %s" msgstr "" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "failed sending %s to %s" msgstr "" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "sent %s to %s" msgstr "" @@ -1605,176 +1635,195 @@ msgstr "" msgid "Conntrack connection mark retrieval failed: %s" msgstr "" -#: dhcp6.c:49 +#: dhcp6.c:59 #, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "" -#: dhcp6.c:62 +#: dhcp6.c:80 #, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "" -#: dhcp6.c:74 +#: dhcp6.c:92 #, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "" -#: rfc3315.c:135 +#: rfc3315.c:149 #, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "" -#: rfc3315.c:144 +#: rfc3315.c:158 #, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "" -#: rfc3315.c:269 +#: rfc3315.c:289 #, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "" -#: rfc3315.c:350 +#: rfc3315.c:370 #, c-format msgid "%u vendor class: %u" msgstr "" -#: rfc3315.c:609 +#: rfc3315.c:418 +#, c-format +msgid "%u client MAC address: %s" +msgstr "" + +#: rfc3315.c:650 #, c-format msgid "unknown prefix-class %d" msgstr "" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "" -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 msgid "no addresses available" msgstr "" -#: rfc3315.c:806 +#: rfc3315.c:855 msgid "address unavailable" msgstr "" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "" -#: rfc3315.c:951 +#: rfc3315.c:1006 msgid "address invalid" msgstr "" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "" -#: rfc3315.c:1003 +#: rfc3315.c:1059 msgid "all addresses still on link" msgstr "" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "" -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "" -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, c-format msgid "Known DHCPv6 options:\n" msgstr "" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr "" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr "" -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "" -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "" -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "" -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "" -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, c-format msgid "router advertisement on %s%s" msgstr "" -#: radv.c:87 +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + +#: radv.c:93 #, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "" -#: auth.c:402 +#: auth.c:435 #, c-format msgid "ignoring zone transfer request from %s" msgstr "" -#: ipset.c:71 +#: ipset.c:95 #, c-format msgid "failed to find kernel version: %s" msgstr "" -#: ipset.c:90 +#: ipset.c:114 #, c-format msgid "failed to create IPset control socket: %s" msgstr "" diff --git a/po/ro.po b/po/ro.po index be75933..60393c7 100644 --- a/po/ro.po +++ b/po/ro.po @@ -21,17 +21,17 @@ msgstr "" msgid "failed to load names from %s: %s" msgstr "încărcarea numelor din %s: %s a eÅŸuat" -#: cache.c:834 dhcp.c:845 +#: cache.c:834 dhcp.c:819 #, c-format msgid "bad address at %s line %d" msgstr "adresă greÅŸită în %s, linia %d" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "nume greÅŸit în %s linia %d" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "citesc %s - %d adrese" @@ -40,37 +40,37 @@ msgstr "citesc %s - %d adrese" msgid "cleared cache" msgstr "memoria temporară a fost ÅŸtearsă" -#: cache.c:1016 +#: cache.c:984 #, c-format msgid "No IPv4 address found for %s" msgstr "" -#: cache.c:1093 +#: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" msgstr "" -#: cache.c:1117 +#: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" msgstr "nu pot da numele %s împrumutului de adresă DHCP a lui %s deoarece numeleexistă în %s cu adresa %s" -#: cache.c:1162 +#: cache.c:1130 #, c-format msgid "time %lu" msgstr "" -#: cache.c:1163 +#: cache.c:1131 #, fuzzy, c-format msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries." msgstr "cantitate de memorie temporară %d, %d/%d stocări temporare aureutilizat locaÅ£ii neexpirate." -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "" -#: cache.c:1188 +#: cache.c:1156 #, c-format msgid "server %s#%d: queries sent %u, retried or failed %u" msgstr "" @@ -80,563 +80,575 @@ msgstr "" msgid "failed to seed the random number generator: %s" msgstr "ascultarea pe socket a eÅŸuat: %s" -#: util.c:189 +#: util.c:192 #, fuzzy msgid "failed to allocate memory" msgstr "nu pot încărca %d bytes" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "nu am putut aloca memorie" -#: util.c:237 +#: util.c:240 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "nu pot citi %s: %s" -#: util.c:245 +#: util.c:248 #, fuzzy, c-format msgid "failed to allocate %d bytes" msgstr "nu pot încărca %d bytes" -#: util.c:400 +#: util.c:403 #, c-format msgid "infinite" msgstr "infinit" -#: option.c:286 +#: option.c:292 msgid "Specify local address(es) to listen on." msgstr "SpecificaÅ£i adresele locale deservite." -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "AfiÅŸează adresele IP ale maÅŸinilor în domeniul dat." -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "Simulează căutări după adresă pentru domenii de adresă private (RFC1918)." -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "Interpretează adresa IP ca NXDOMAIN (împotriva manipulărilor Verisign)" -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "Specifică mărimea înregistrărilor temporare (implicit e %s)." -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "Specifică fiÅŸier de configurare (implicit e %s)." -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "NU porneÅŸte în fundal: rulează în modul depanare." -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "NU înainta cererile ce nu conÅ£in domeniu DNS." -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "Răspunde cu înregistrări MX spre el însuÅŸi pentru maÅŸini locale." -#: option.c:295 +#: option.c:301 msgid "Expand simple names in /etc/hosts with domain-suffix." msgstr "Adaugă numelor simple din /etc/hosts numele domeniului ca sufix." -#: option.c:296 +#: option.c:302 msgid "Don't forward spurious DNS requests from Windows hosts." msgstr "Nu inainta cereri DNS defecte provenite de la maÅŸini Windows." -#: option.c:297 +#: option.c:303 msgid "Enable DHCP in the range given with lease duration." msgstr "Activează DHCP în domeniul dat cu durată limitată de împrumut." -#: option.c:298 +#: option.c:304 #, c-format msgid "Change to this group after startup (defaults to %s)." msgstr "Rulează sub acest grup după pornire (implicit e %s)." -#: option.c:299 +#: option.c:305 msgid "Set address or hostname for a specified machine." msgstr "Schimbă adresa sau numele maÅŸinii specificate." -#: option.c:300 +#: option.c:306 #, fuzzy msgid "Read DHCP host specs from file." msgstr "nume MX invalid" -#: option.c:301 +#: option.c:307 msgid "Read DHCP option specs from file." msgstr "" -#: option.c:302 +#: option.c:308 msgid "Evaluate conditional tag expression." msgstr "" -#: option.c:303 +#: option.c:309 #, c-format msgid "Do NOT load %s file." msgstr "Nu încarcă fiÅŸierul %s." -#: option.c:304 +#: option.c:310 #, c-format msgid "Specify a hosts file to be read in addition to %s." msgstr "Specifică spre citire un fiÅŸier hosts adiÅ£ional la %s." -#: option.c:305 +#: option.c:311 msgid "Specify interface(s) to listen on." msgstr "Specifică interfeÅ£ele deservite." -#: option.c:306 +#: option.c:312 msgid "Specify interface(s) NOT to listen on." msgstr "Specifică interfeÅ£ele NE-deservite." -#: option.c:307 +#: option.c:313 #, fuzzy msgid "Map DHCP user class to tag." msgstr "Leagă clasa de utilizator DHCP cu grup de opÅ£iuni." -#: option.c:308 +#: option.c:314 msgid "Map RFC3046 circuit-id to tag." msgstr "" -#: option.c:309 +#: option.c:315 msgid "Map RFC3046 remote-id to tag." msgstr "" -#: option.c:310 +#: option.c:316 msgid "Map RFC3993 subscriber-id to tag." msgstr "" -#: option.c:311 +#: option.c:317 #, fuzzy msgid "Don't do DHCP for hosts with tag set." msgstr "Nu furniza DHCP maÅŸinilor din grupul de opÅ£iuni." -#: option.c:312 +#: option.c:318 #, fuzzy msgid "Force broadcast replies for hosts with tag set." msgstr "Nu furniza DHCP maÅŸinilor din grupul de opÅ£iuni." -#: option.c:313 +#: option.c:319 msgid "Do NOT fork into the background, do NOT run in debug mode." msgstr "NU porneÅŸte în fundal, NU rulează în modul depanare." -#: option.c:314 +#: option.c:320 msgid "Assume we are the only DHCP server on the local network." msgstr "Presupune că suntem singurul server DHCP din reÅ£eaua locală." -#: option.c:315 +#: option.c:321 #, c-format msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "Specifică fiÅŸierul de stocare a împrumuturilor DHCP (implicit e %s)." -#: option.c:316 +#: option.c:322 msgid "Return MX records for local hosts." msgstr "Răspunde cu întregistrări MX pentru maÅŸini locale." -#: option.c:317 +#: option.c:323 msgid "Specify an MX record." msgstr "Specifică o înregistrare MX." -#: option.c:318 +#: option.c:324 msgid "Specify BOOTP options to DHCP server." msgstr "Specifică opÅ£iuni BOOTP serverului DHCP." -#: option.c:319 +#: option.c:325 #, c-format msgid "Do NOT poll %s file, reload only on SIGHUP." msgstr "Nu încărca fiÅŸierul %s, citeÅŸte-l doar la SIGHUP." -#: option.c:320 +#: option.c:326 msgid "Do NOT cache failed search results." msgstr "NU memora rezultatele de căutare DNS eÅŸuatată." -#: option.c:321 +#: option.c:327 #, c-format msgid "Use nameservers strictly in the order given in %s." msgstr "FoloseÅŸte servere DNS strict în ordinea dată în %s." -#: option.c:322 +#: option.c:328 #, fuzzy msgid "Specify options to be sent to DHCP clients." msgstr "Configurează opÅ£iuni în plusce trebuie trimise clienÅ£ilor DHCP." -#: option.c:323 +#: option.c:329 msgid "DHCP option sent even if the client does not request it." msgstr "" -#: option.c:324 +#: option.c:330 msgid "Specify port to listen for DNS requests on (defaults to 53)." msgstr "Specifică numărul portului pentru cereri DNS (implicit e 53)." -#: option.c:325 +#: option.c:331 #, c-format msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)." msgstr "Marimea maximă a pachetului UDP pentru EDNS.0 (implicit e %s)." -#: option.c:326 +#: option.c:332 #, fuzzy msgid "Log DNS queries." msgstr "ÃŽnregistrează tranzacÅ£iile." -#: option.c:327 +#: option.c:333 #, fuzzy msgid "Force the originating port for upstream DNS queries." msgstr "ForÅ£ează acest port pentru datele ce pleacă." -#: option.c:328 +#: option.c:334 msgid "Do NOT read resolv.conf." msgstr "NU citi fiÅŸierul resolv.conf" -#: option.c:329 +#: option.c:335 #, c-format msgid "Specify path to resolv.conf (defaults to %s)." msgstr "Specifică calea către resolv.conf (implicit e %s)." -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "Specifică adresele server(elor) superioare cu domenii opÅ£ionale." -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "Nu înaintează cererile spre domeniile specificate." -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "Specifică domeniul de transmis prin DHCP." -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "Specifică o Å£intă într-o înregistrare MX." -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts." -#: option.c:335 +#: option.c:341 #, fuzzy msgid "Specify time-to-live in seconds for negative caching." msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts." -#: option.c:336 +#: option.c:342 #, fuzzy msgid "Specify time-to-live in seconds for maximum TTL to send to clients." msgstr "Specifică TTL în secunde pentru răspunsurile din /etc/hosts." -#: option.c:337 +#: option.c:343 #, c-format msgid "Change to this user after startup. (defaults to %s)." msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)." -#: option.c:338 +#: option.c:344 #, fuzzy msgid "Map DHCP vendor class to tag." msgstr "Trimite opÅ£iuni DHCP în funcÅ£ie de marca plăcii de reÅ£ea." -#: option.c:339 +#: option.c:345 msgid "Display dnsmasq version and copyright information." msgstr "AfiÅŸează versiunea dnsmasq ÅŸi drepturile de autor." -#: option.c:340 +#: option.c:346 msgid "Translate IPv4 addresses from upstream servers." msgstr "Traduce adresele IPv4 de la serverele DNS superioare." -#: option.c:341 +#: option.c:347 msgid "Specify a SRV record." msgstr "Specifică o înregistrare SRV." -#: option.c:342 +#: option.c:348 msgid "Display this message. Use --help dhcp for known DHCP options." msgstr "" -#: option.c:343 +#: option.c:349 #, fuzzy, c-format msgid "Specify path of PID file (defaults to %s)." msgstr "Specifică o cale pentru fiÅŸierul PID. (implicit %s)." -#: option.c:344 +#: option.c:350 #, c-format msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)." -#: option.c:345 +#: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." msgstr "Răspunde cererilor DNS în funcÅ£ie de interfaÅ£a pe care a venit cererea." -#: option.c:346 +#: option.c:352 msgid "Specify TXT DNS record." msgstr "Specifică o înregistrare TXT." -#: option.c:347 +#: option.c:353 #, fuzzy msgid "Specify PTR DNS record." msgstr "Specifică o înregistrare TXT." -#: option.c:348 +#: option.c:354 msgid "Give DNS name to IPv4 address of interface." msgstr "" -#: option.c:349 +#: option.c:355 msgid "Bind only to interfaces in use." msgstr "Ascultă doar pe interfeÅ£ele active." -#: option.c:350 +#: option.c:356 #, c-format msgid "Read DHCP static host information from %s." msgstr "CiteÅŸte informaÅ£ii DHCP statice despre maÅŸină din %s." -#: option.c:351 +#: option.c:357 msgid "Enable the DBus interface for setting upstream servers, etc." msgstr "Activeaza interfaÅ£a DBus pentru configurarea serverelor superioare." -#: option.c:352 +#: option.c:358 msgid "Do not provide DHCP on this interface, only provide DNS." msgstr "Nu activează DHCP ci doar DNS pe această interfaţă." -#: option.c:353 +#: option.c:359 msgid "Enable dynamic address allocation for bootp." msgstr "Activează alocarea dinamică a adreselor pentru BOOTP." -#: option.c:354 +#: option.c:360 #, fuzzy msgid "Map MAC address (with wildcards) to option set." msgstr "Trimite opÅ£iuni DHCP în funcÅ£ie de marca plăcii de reÅ£ea." -#: option.c:355 +#: option.c:361 msgid "Treat DHCP requests on aliases as arriving from interface." msgstr "" -#: option.c:356 +#: option.c:362 msgid "Disable ICMP echo address checking in the DHCP server." msgstr "" -#: option.c:357 +#: option.c:363 msgid "Shell script to run on DHCP lease creation and destruction." msgstr "" -#: option.c:358 +#: option.c:364 msgid "Lua script to run on DHCP lease creation and destruction." msgstr "" -#: option.c:359 +#: option.c:365 msgid "Run lease-change scripts as this user." msgstr "" -#: option.c:360 +#: option.c:366 msgid "Read configuration from all the files in this directory." msgstr "" -#: option.c:361 +#: option.c:367 #, fuzzy msgid "Log to this syslog facility or file. (defaults to DAEMON)" msgstr "Rulează sub acest utilizator după pornire. (implicit e %s)." -#: option.c:362 +#: option.c:368 msgid "Do not use leasefile." msgstr "" -#: option.c:363 +#: option.c:369 #, fuzzy, c-format msgid "Maximum number of concurrent DNS queries. (defaults to %s)" msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)." -#: option.c:364 +#: option.c:370 #, c-format msgid "Clear DNS cache when reloading %s." msgstr "" -#: option.c:365 +#: option.c:371 msgid "Ignore hostnames provided by DHCP clients." msgstr "" -#: option.c:366 +#: option.c:372 msgid "Do NOT reuse filename and server fields for extra DHCP options." msgstr "" -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "" -#: option.c:368 +#: option.c:374 msgid "Export files by TFTP only from the specified subtree." msgstr "" -#: option.c:369 +#: option.c:375 msgid "Add client IP address to tftp-root." msgstr "" -#: option.c:370 +#: option.c:376 msgid "Allow access only to files owned by the user running dnsmasq." msgstr "" -#: option.c:371 +#: option.c:377 #, fuzzy, c-format msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)." msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)." -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "" -#: option.c:373 +#: option.c:379 msgid "Convert TFTP filenames to lowercase" msgstr "" -#: option.c:374 +#: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." msgstr "" -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "" -#: option.c:376 +#: option.c:382 msgid "Enable async. logging; optionally set queue length." msgstr "" -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "" -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "" -#: option.c:379 +#: option.c:385 msgid "Inhibit DNS-rebind protection on this domain." msgstr "" -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "" -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "" -#: option.c:382 -msgid "Use alternative ports for DHCP." -msgstr "" - -#: option.c:383 -#, fuzzy -msgid "Specify NAPTR DNS record." -msgstr "Specifică o înregistrare TXT." - -#: option.c:384 -msgid "Specify lowest port available for DNS query transmission." -msgstr "" - -#: option.c:385 -msgid "Use only fully qualified domain names for DHCP clients." -msgstr "" - -#: option.c:386 -msgid "Generate hostnames based on MAC address for nameless clients." -msgstr "" - -#: option.c:387 -msgid "Use these DHCP relays as full proxies." -msgstr "" - #: option.c:388 -msgid "Specify alias name for LOCAL DNS name." +msgid "Use alternative ports for DHCP." msgstr "" #: option.c:389 #, fuzzy -msgid "Prompt to send to PXE clients." -msgstr "Configurează opÅ£iuni în plusce trebuie trimise clienÅ£ilor DHCP." +msgid "Specify NAPTR DNS record." +msgstr "Specifică o înregistrare TXT." #: option.c:390 -msgid "Boot service for PXE menu." +msgid "Specify lowest port available for DNS query transmission." msgstr "" #: option.c:391 -msgid "Check configuration syntax." +msgid "Use only fully qualified domain names for DHCP clients." msgstr "" #: option.c:392 -msgid "Add requestor's MAC address to forwarded DNS queries." +msgid "Generate hostnames based on MAC address for nameless clients." msgstr "" #: option.c:393 +msgid "Use these DHCP relays as full proxies." +msgstr "" + +#: option.c:394 +msgid "Relay DHCP requests to a remote server" +msgstr "" + +#: option.c:395 +msgid "Specify alias name for LOCAL DNS name." +msgstr "" + +#: option.c:396 +#, fuzzy +msgid "Prompt to send to PXE clients." +msgstr "Configurează opÅ£iuni în plusce trebuie trimise clienÅ£ilor DHCP." + +#: option.c:397 +msgid "Boot service for PXE menu." +msgstr "" + +#: option.c:398 +msgid "Check configuration syntax." +msgstr "" + +#: option.c:399 +msgid "Add requestor's MAC address to forwarded DNS queries." +msgstr "" + +#: option.c:400 #, fuzzy msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "Traduce adresele IPv4 de la serverele DNS superioare." -#: option.c:394 +#: option.c:401 msgid "Attempt to allocate sequential IP addresses to DHCP clients." msgstr "" -#: option.c:395 +#: option.c:402 msgid "Copy connection-track mark from queries to upstream connections." msgstr "" -#: option.c:396 +#: option.c:403 msgid "Allow DHCP clients to do their own DDNS updates." msgstr "" -#: option.c:397 +#: option.c:404 msgid "Send router-advertisements for interfaces doing DHCPv6" msgstr "" -#: option.c:398 +#: option.c:405 +msgid "Always send frequent router-advertisements" +msgstr "" + +#: option.c:406 msgid "Specify DUID_EN-type DHCPv6 server DUID" msgstr "" -#: option.c:399 +#: option.c:407 #, fuzzy msgid "Specify host (A/AAAA and PTR) records" msgstr "Specifică o înregistrare MX." -#: option.c:400 +#: option.c:408 #, fuzzy msgid "Specify arbitrary DNS resource record" msgstr "Specifică o înregistrare TXT." -#: option.c:401 +#: option.c:409 #, fuzzy msgid "Bind to interfaces in use - check for new interfaces" msgstr "interfaţă necunoscută %s" -#: option.c:402 +#: option.c:410 msgid "Export local names to global DNS" msgstr "" -#: option.c:403 +#: option.c:411 msgid "Domain to export to global DNS" msgstr "" -#: option.c:404 +#: option.c:412 msgid "Set TTL for authoritative replies" msgstr "" -#: option.c:405 +#: option.c:413 msgid "Set authoritive zone information" msgstr "" -#: option.c:406 +#: option.c:414 msgid "Secondary authoritative nameservers for forward domains" msgstr "" -#: option.c:407 +#: option.c:415 msgid "Peers which are allowed to do zone transfer" msgstr "" -#: option.c:408 +#: option.c:416 msgid "Specify ipsets to which matching domains should be added" msgstr "" -#: option.c:410 +#: option.c:417 +msgid "Specify a domain and address range for sythesised names" +msgstr "" + +#: option.c:419 msgid "Specify DHCPv6 prefix class" msgstr "" -#: option.c:596 +#: option.c:605 #, c-format msgid "" "Usage: dnsmasq [options]\n" @@ -645,305 +657,314 @@ msgstr "" "Utilizare: dnsmasq [opÅ£iuni]\n" "\n" -#: option.c:598 +#: option.c:607 #, c-format msgid "Use short options only on the command line.\n" msgstr "FolosiÅ£i opÅ£iunile prescurtate doar în linie de comandă.\n" -#: option.c:600 +#: option.c:609 #, fuzzy, c-format msgid "Valid options are:\n" msgstr "OpÅ£iunile valide sunt:\n" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "port invalid" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "" -#: option.c:690 option.c:3179 +#: option.c:699 option.c:3275 #, fuzzy msgid "bad interface name" msgstr "nume MX invalid" -#: option.c:720 +#: option.c:729 #, fuzzy msgid "bad address" msgstr "citesc %s - %d adrese" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "dhcp-option invalid" -#: option.c:929 +#: option.c:945 #, fuzzy msgid "bad IP address" msgstr "citesc %s - %d adrese" -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 #, fuzzy msgid "bad IPv6 address" msgstr "citesc %s - %d adrese" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "domeniu DNS invalid în declaraÅ£ia dhcp-option" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "declararea dhcp-option este prea lungă" -#: option.c:1236 +#: option.c:1252 msgid "illegal dhcp-match" msgstr "" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "" -#: option.c:1358 option.c:3702 +#: option.c:1374 option.c:3802 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "nu pot citi %s: %s" -#: option.c:1390 tftp.c:474 +#: option.c:1406 tftp.c:487 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "nu pot citi %s: %s" -#: option.c:1426 +#: option.c:1442 msgid "setting log facility is not possible under Android" msgstr "" -#: option.c:1435 +#: option.c:1451 msgid "bad log facility" msgstr "" -#: option.c:1484 +#: option.c:1500 msgid "bad MX preference" msgstr "preferinţă MX invalidă" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "nume MX invalid" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "Å£intă MX invalidă" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "" -#: option.c:1521 +#: option.c:1537 msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" msgstr "" -#: option.c:1631 +#: option.c:1739 option.c:1800 #, fuzzy msgid "bad prefix" msgstr "port invalid" -#: option.c:2043 +#: option.c:2094 msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "" -#: option.c:2223 +#: option.c:2274 #, fuzzy msgid "bad port range" msgstr "port invalid" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "" -#: option.c:2297 +#: option.c:2350 msgid "only one tag allowed" msgstr "" -#: option.c:2317 option.c:2329 option.c:2461 +#: option.c:2370 option.c:2382 option.c:2491 option.c:2532 msgid "bad dhcp-range" msgstr "dhcp-range invalid" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "domeniu DHCP inconsistent" -#: option.c:2402 -msgid "prefix must be exactly 64 for RA subnets" +#: option.c:2459 +msgid "prefix length must be exactly 64 for RA subnets" msgstr "" -#: option.c:2404 -msgid "prefix must be exactly 64 for subnet constructors" +#: option.c:2461 +msgid "prefix length must be exactly 64 for subnet constructors" msgstr "" -#: option.c:2407 -msgid "prefix must be at least 64" +#: option.c:2465 +msgid "prefix length must be at least 64" msgstr "" -#: option.c:2412 +#: option.c:2468 #, fuzzy msgid "inconsistent DHCPv6 range" msgstr "domeniu DHCP inconsistent" -#: option.c:2519 option.c:2567 +#: option.c:2479 +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "" + +#: option.c:2590 option.c:2638 #, fuzzy msgid "bad hex constant" msgstr "dhcp-host invalid" -#: option.c:2541 +#: option.c:2612 msgid "cannot match tags in --dhcp-host" msgstr "" -#: option.c:2589 +#: option.c:2660 #, fuzzy, c-format msgid "duplicate dhcp-host IP address %s" msgstr "adresă IP duplicat %s în declaraÅ£ia dhcp-config." -#: option.c:2645 +#: option.c:2716 #, fuzzy msgid "bad DHCP host name" msgstr "nume MX invalid" -#: option.c:2727 +#: option.c:2798 #, fuzzy msgid "bad tag-if" msgstr "Å£intă MX invalidă" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "număr de port invalid" -#: option.c:3113 +#: option.c:3184 #, fuzzy msgid "bad dhcp-proxy address" msgstr "citesc %s - %d adrese" -#: option.c:3124 +#: option.c:3210 +#, fuzzy +msgid "Bad dhcp-relay" +msgstr "dhcp-range invalid" + +#: option.c:3220 msgid "bad DUID" msgstr "" -#: option.c:3166 +#: option.c:3262 #, fuzzy msgid "invalid alias range" msgstr "pondere invalidă" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "" -#: option.c:3210 +#: option.c:3310 msgid "duplicate CNAME" msgstr "" -#: option.c:3230 +#: option.c:3330 #, fuzzy msgid "bad PTR record" msgstr "înregistrare SRV invalidă" -#: option.c:3261 +#: option.c:3361 #, fuzzy msgid "bad NAPTR record" msgstr "înregistrare SRV invalidă" -#: option.c:3295 +#: option.c:3395 #, fuzzy msgid "bad RR record" msgstr "înregistrare SRV invalidă" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "înregistrare TXT invalidă" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "înregistrare SRV invalidă" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "Å£intă SRV invalidă" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "prioritate invalidă" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "pondere invalidă" -#: option.c:3417 +#: option.c:3517 #, fuzzy msgid "Bad host-record" msgstr "înregistrare SRV invalidă" -#: option.c:3434 +#: option.c:3534 #, fuzzy msgid "Bad name in host-record" msgstr "nume invalid în %s" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "" -#: option.c:3522 +#: option.c:3622 msgid "missing \"" msgstr "lipseÅŸte \"" -#: option.c:3579 +#: option.c:3679 msgid "bad option" msgstr "opÅ£iune invalidă" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "parametru nerecunoscut" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "parametru lipsa" -#: option.c:3590 +#: option.c:3690 msgid "error" msgstr "eroare" -#: option.c:3592 +#: option.c:3692 #, fuzzy, c-format msgid " at line %d of %s" msgstr "%s la linia %d din %%s" -#: option.c:3656 tftp.c:648 +#: option.c:3756 tftp.c:661 #, c-format msgid "cannot read %s: %s" msgstr "nu pot citi %s: %s" -#: option.c:3823 option.c:3859 +#: option.c:3923 option.c:3959 #, fuzzy, c-format msgid "read %s" msgstr "citesc %s" -#: option.c:3915 +#: option.c:4015 msgid "junk found in command line" msgstr "" -#: option.c:3950 +#: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "dnsmasq versiunea %s %s\n" -#: option.c:3951 +#: option.c:4051 #, fuzzy, c-format msgid "" "Compile time options: %s\n" @@ -952,62 +973,62 @@ msgstr "" "OpÅ£iuni cu care a fost compilat %s\n" "\n" -#: option.c:3952 +#: option.c:4052 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Acest program vine FÄ‚RÄ‚ NICI O GARANÅ¢IE.\n" -#: option.c:3953 +#: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "Dnsmasq este un program gratuit, sunteÅ£i invitaÅ£i să-l redistribuiÅ£i\n" -#: option.c:3954 +#: option.c:4054 #, fuzzy, c-format msgid "under the terms of the GNU General Public License, version 2 or 3.\n" msgstr "în termenii LicenÅ£ei publice generale GNU, versiunea 2.\n" -#: option.c:3965 +#: option.c:4065 msgid "try --help" msgstr "" -#: option.c:3967 +#: option.c:4067 msgid "try -w" msgstr "" -#: option.c:3969 +#: option.c:4069 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "opÅ£iuni în linie de comandă invalide: %s." -#: option.c:4018 +#: option.c:4118 #, c-format msgid "cannot get host-name: %s" msgstr "nu pot citi numele maÅŸinii: %s" -#: option.c:4046 +#: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "se permite un singur fiÅŸier resolv.conf în modul no-poll" -#: option.c:4056 +#: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." msgstr "am nevoie de un singur resolv.conf din care să citesc numele domeniului." -#: option.c:4059 network.c:1039 dhcp.c:794 +#: option.c:4159 network.c:1178 dhcp.c:768 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "nu pot citi %s: %s" -#: option.c:4076 +#: option.c:4176 #, c-format msgid "no search directive found in %s" msgstr "nu s-a găsit nici un criteriu de căutare în %s" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "" @@ -1026,104 +1047,109 @@ msgstr "serverul DNS %s refuză interogările recursive" msgid "possible DNS-rebind attack detected: %s" msgstr "" -#: network.c:414 +#: forward.c:1216 +#, fuzzy, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "Specifică numărul maxim de împrumuturi DHCP (implicit %s)." + +#: network.c:551 #, fuzzy, c-format msgid "failed to create listening socket for %s: %s" msgstr "creearea socket-ului de ascultare a eÅŸuat: %s" -#: network.c:743 +#: network.c:882 #, fuzzy, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s" -#: network.c:937 +#: network.c:1076 #, fuzzy, c-format msgid "failed to bind server socket for %s: %s" msgstr "activarea socket-ului de ascultare pentru %s a eÅŸuat: %s" -#: network.c:974 +#: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" msgstr "ignorăm serverul DNS %s - interfaţă locală" -#: network.c:985 +#: network.c:1124 #, fuzzy, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" msgstr "ignorăm serverul DNS %s - nu pot creea/activa socket-ul: %s" -#: network.c:1002 +#: network.c:1141 msgid "unqualified" msgstr "invalid" -#: network.c:1002 +#: network.c:1141 msgid "names" msgstr "" -#: network.c:1004 +#: network.c:1143 msgid "default" msgstr "" -#: network.c:1006 +#: network.c:1145 msgid "domain" msgstr "domeniu" -#: network.c:1009 +#: network.c:1148 #, c-format msgid "using local addresses only for %s %s" msgstr "folosim adresele locale doar pentru %S %s" -#: network.c:1011 +#: network.c:1150 #, fuzzy, c-format msgid "using standard nameservers for %s %s" msgstr "folosim serverul DNS %s#%d pentru %s %s" -#: network.c:1013 +#: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" msgstr "folosim serverul DNS %s#%d pentru %s %s" -#: network.c:1016 +#: network.c:1155 #, fuzzy, c-format msgid "using nameserver %s#%d(via %s)" msgstr "folosim serverul DNS %s#%d" -#: network.c:1018 +#: network.c:1157 #, c-format msgid "using nameserver %s#%d" msgstr "folosim serverul DNS %s#%d" -#: dnsmasq.c:131 +#: dnsmasq.c:134 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "DBus nu este disponibil: puneÅ£i HAVE_DBUS in src/config.h" -#: dnsmasq.c:136 +#: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" msgstr "" -#: dnsmasq.c:139 +#: dnsmasq.c:142 #, fuzzy msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h" msgstr "DBus nu este disponibil: puneÅ£i HAVE_DBUS in src/config.h" -#: dnsmasq.c:144 +#: dnsmasq.c:147 msgid "asychronous logging is not available under Solaris" msgstr "" -#: dnsmasq.c:149 +#: dnsmasq.c:152 msgid "asychronous logging is not available under Android" msgstr "" -#: dnsmasq.c:154 +#: dnsmasq.c:157 #, fuzzy msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h" msgstr "DBus nu este disponibil: puneÅ£i HAVE_DBUS in src/config.h" -#: dnsmasq.c:164 +#: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" msgstr "" -#: dnsmasq.c:186 +#: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" msgstr "" @@ -1141,431 +1167,436 @@ msgstr "enumerarea interfeÅ£elor a eÅŸuat: %s" msgid "unknown interface %s" msgstr "interfaţă necunoscută %s" -#: dnsmasq.c:274 dnsmasq.c:860 +#: dnsmasq.c:275 dnsmasq.c:870 #, c-format msgid "DBus error: %s" msgstr "eroare DBus: %s" -#: dnsmasq.c:277 +#: dnsmasq.c:278 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "DBus nu este disponibil: puneÅ£i HAVE_DBUS in src/config.h" -#: dnsmasq.c:305 +#: dnsmasq.c:306 #, c-format msgid "unknown user or group: %s" msgstr "" -#: dnsmasq.c:360 +#: dnsmasq.c:361 #, c-format msgid "cannot chdir to filesystem root: %s" msgstr "" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, fuzzy, c-format msgid "started, version %s DNS disabled" msgstr "am pornit, versiunea %s memorie temporară dezactivată" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "am ponit, versiunea %s memorie temporară %d" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "am pornit, versiunea %s memorie temporară dezactivată" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "compilat cu opÅ£iunile: %s" -#: dnsmasq.c:609 +#: dnsmasq.c:610 msgid "DBus support enabled: connected to system bus" msgstr "suportul DBus activ: sunt conectat la magistrala sistem" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "suportul DBus activ: aÅŸtept conexiunea la magistrală" # for compatibility purposes the letters â, ă, ÅŸ, Å£ and î can be written as their look-alike correspondent. -#: dnsmasq.c:616 +#: dnsmasq.c:617 #, fuzzy, c-format msgid "warning: failed to change owner of %s: %s" msgstr "încărcarea numelor din %s: %s a eÅŸuat" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "specific opÅ£iunea --bind-interfaces din cauza limitărilor SO" -#: dnsmasq.c:625 +#: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" msgstr "atenÅ£ie: interfaÅ£a %s nu există momentan" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:633 +#: dnsmasq.c:634 #, fuzzy msgid "warning: no upstream servers configured" msgstr "configurăm serverele superioare prin Dbus" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "" -#: dnsmasq.c:652 +#: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 msgid "root is " msgstr "" -#: dnsmasq.c:669 +#: dnsmasq.c:676 #, fuzzy msgid "enabled" msgstr "dezactivat" -#: dnsmasq.c:671 +#: dnsmasq.c:678 msgid "secure mode" msgstr "" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:862 +#: dnsmasq.c:872 msgid "connected to system DBus" msgstr "magistrala sistem Dbus conectată" -#: dnsmasq.c:1007 +#: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" msgstr "" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, fuzzy, c-format msgid "failed to create helper: %s" msgstr "nu pot citi %s: %s" -#: dnsmasq.c:1013 +#: dnsmasq.c:1023 #, c-format msgid "setting capabilities failed: %s" msgstr "" # for compatibility purposes the letters â, ă, ÅŸ, Å£ and î can be written as their look-alike correspondent. -#: dnsmasq.c:1016 +#: dnsmasq.c:1026 #, fuzzy, c-format msgid "failed to change user-id to %s: %s" msgstr "încărcarea numelor din %s: %s a eÅŸuat" # for compatibility purposes the letters â, ă, ÅŸ, Å£ and î can be written as their look-alike correspondent. -#: dnsmasq.c:1019 +#: dnsmasq.c:1029 #, fuzzy, c-format msgid "failed to change group-id to %s: %s" msgstr "încărcarea numelor din %s: %s a eÅŸuat" -#: dnsmasq.c:1022 +#: dnsmasq.c:1032 #, fuzzy, c-format msgid "failed to open pidfile %s: %s" msgstr "nu pot citi %s: %s" -#: dnsmasq.c:1025 +#: dnsmasq.c:1035 #, fuzzy, c-format msgid "cannot open log %s: %s" msgstr "nu pot deschide %s:%s" -#: dnsmasq.c:1028 +#: dnsmasq.c:1038 #, fuzzy, c-format msgid "failed to load Lua script: %s" msgstr "nu pot încărca %s: %s" -#: dnsmasq.c:1031 +#: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" msgstr "" -#: dnsmasq.c:1095 +#: dnsmasq.c:1105 #, c-format msgid "script process killed by signal %d" msgstr "" -#: dnsmasq.c:1099 +#: dnsmasq.c:1109 #, c-format msgid "script process exited with status %d" msgstr "" -#: dnsmasq.c:1103 +#: dnsmasq.c:1113 #, fuzzy, c-format msgid "failed to execute %s: %s" msgstr "accesarea serverului %s a eÅŸuat: %s" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "am primit SIGTERM, am terminat" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, fuzzy, c-format msgid "failed to access %s: %s" msgstr "accesarea serverului %s a eÅŸuat: %s" -#: dnsmasq.c:1206 +#: dnsmasq.c:1216 #, c-format msgid "reading %s" msgstr "citesc %s" -#: dnsmasq.c:1217 +#: dnsmasq.c:1227 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "nu s-a găsit nici un criteriu de căutare în %s" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "nu pot creea socket DHCP: %s" -#: dhcp.c:64 +#: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" msgstr "configurarea opÅ£iunilor socketului DHCP a eÅŸuat: %s" -#: dhcp.c:77 +#: dhcp.c:89 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" msgstr "configurarea SO_REUSEADDR pe socket-ul DHCP a eÅŸuat: %s" -#: dhcp.c:89 +#: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s" -#: dhcp.c:115 +#: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." msgstr "nu pot creea socket ICMP raw: %s." -#: dhcp.c:225 +#: dhcp.c:239 #, fuzzy, c-format msgid "unknown interface %s in bridge-interface" msgstr "interfaţă necunoscută %s" -#: dhcp.c:250 +#: dhcp.c:278 #, c-format msgid "DHCP packet received on %s which has no address" msgstr "" -#: dhcp.c:457 +#: dhcp.c:505 #, c-format msgid "DHCP range %s -- %s is not consistent with netmask %s" msgstr "domeniu DHCP %s -- %s nu este consistent cu masca de reÅ£ea %s" -#: dhcp.c:832 +#: dhcp.c:806 #, c-format msgid "bad line at %s line %d" msgstr "linie invalidă în %s rândul %d" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "" +#: dhcp.c:993 rfc3315.c:2047 +#, c-format +msgid "DHCP relay %s -> %s" +msgstr "" + #: lease.c:61 #, fuzzy, c-format msgid "cannot open or create lease file %s: %s" msgstr "nu pot creea sau deschide fiÅŸierul cu împrumuturi: %s" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "prea multe împrumuturi stocate" -#: lease.c:164 +#: lease.c:165 #, fuzzy, c-format msgid "cannot run lease-init script %s: %s" msgstr "nu pot citi %s: %s" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "" -#: lease.c:339 +#: lease.c:342 #, fuzzy, c-format msgid "failed to write %s: %s (retry in %us)" msgstr "nu pot citi %s: %s" -#: lease.c:843 +#: lease.c:871 #, c-format msgid "Ignoring domain %s for DHCP host name %s" msgstr "" -#: rfc2131.c:337 +#: rfc2131.c:338 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "cu selectorul de subreÅ£ea" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "prin" -#: rfc2131.c:350 +#: rfc2131.c:351 #, fuzzy, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s" -#: rfc2131.c:353 rfc3315.c:272 +#: rfc2131.c:354 rfc3315.c:292 #, c-format msgid "%u available DHCP range: %s -- %s" msgstr "" -#: rfc2131.c:382 -msgid "disabled" -msgstr "dezactivat" - -#: rfc2131.c:423 rfc2131.c:953 rfc2131.c:1371 rfc3315.c:555 rfc3315.c:771 -#: rfc3315.c:1017 -msgid "ignored" -msgstr "ignorat" - -#: rfc2131.c:438 rfc2131.c:1191 rfc3315.c:814 -msgid "address in use" -msgstr "adresa este folosită" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "nici o adresă disponibilă" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "reÅ£ea greÅŸită" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "adresă lipsă" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "nu mai am de unde să împrumut" - -#: rfc2131.c:576 rfc3315.c:428 -#, c-format -msgid "%u client provides name: %s" -msgstr "" - -#: rfc2131.c:731 +#: rfc2131.c:465 #, fuzzy, c-format msgid "%u vendor class: %s" msgstr "eroare DBus: %s" -#: rfc2131.c:733 +#: rfc2131.c:467 #, fuzzy, c-format msgid "%u user class: %s" msgstr "eroare DBus: %s" +#: rfc2131.c:494 +msgid "disabled" +msgstr "dezactivat" + +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 +#: rfc3315.c:1082 +msgid "ignored" +msgstr "ignorat" + +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +msgid "address in use" +msgstr "adresa este folosită" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "nici o adresă disponibilă" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "reÅ£ea greÅŸită" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "adresă lipsă" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "nu mai am de unde să împrumut" + +#: rfc2131.c:687 rfc3315.c:466 +#, c-format +msgid "%u client provides name: %s" +msgstr "" + #: rfc2131.c:792 msgid "PXE BIS not supported" msgstr "" -#: rfc2131.c:923 rfc3315.c:1111 +#: rfc2131.c:931 rfc3315.c:1176 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "dezactivăm adresele DHCP statice %s" -#: rfc2131.c:944 +#: rfc2131.c:952 msgid "unknown lease" msgstr "împrumut necunoscut" -#: rfc2131.c:976 +#: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:986 +#: rfc2131.c:994 #, c-format msgid "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:989 +#: rfc2131.c:997 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "" -#: rfc2131.c:1092 +#: rfc2131.c:1100 msgid "wrong server-ID" msgstr "" -#: rfc2131.c:1111 +#: rfc2131.c:1119 msgid "wrong address" msgstr "adresă greÅŸită" -#: rfc2131.c:1129 rfc3315.c:911 +#: rfc2131.c:1137 rfc3315.c:959 msgid "lease not found" msgstr "împrumutul nu a fost găsit" -#: rfc2131.c:1162 +#: rfc2131.c:1170 msgid "address not available" msgstr "adresă indisponibilă" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "împrumut static este disponibil" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "adresă rezervată" -#: rfc2131.c:1185 +#: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" msgstr "" -#: rfc2131.c:1679 +#: rfc2131.c:1701 #, c-format msgid "%u bootfile name: %s" msgstr "" -#: rfc2131.c:1688 +#: rfc2131.c:1710 #, fuzzy, c-format msgid "%u server name: %s" msgstr "eroare DBus: %s" -#: rfc2131.c:1696 +#: rfc2131.c:1718 #, fuzzy, c-format msgid "%u next server: %s" msgstr "eroare DBus: %s" -#: rfc2131.c:1699 +#: rfc2131.c:1721 #, c-format msgid "%u broadcast response" msgstr "" -#: rfc2131.c:1762 +#: rfc2131.c:1784 #, fuzzy, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" msgstr "nu pot trimite opÅ£iunea DHCP %d: nu mai este loc în pachet" -#: rfc2131.c:2002 +#: rfc2131.c:2025 msgid "PXE menu too large" msgstr "" -#: rfc2131.c:2139 rfc3315.c:1332 +#: rfc2131.c:2162 rfc3315.c:1420 #, fuzzy, c-format msgid "%u requested options: %s" msgstr "compilat cu opÅ£iunile: %s" -#: rfc2131.c:2415 +#: rfc2131.c:2442 #, c-format msgid "cannot send RFC3925 option: too many options for enterprise number %d" msgstr "" @@ -1575,7 +1606,7 @@ msgstr "" msgid "cannot create netlink socket: %s" msgstr "nu pot să activez socket-ul netlink: %s" -#: netlink.c:354 +#: netlink.c:363 #, fuzzy, c-format msgid "netlink returns error: %s" msgstr "eroare DBus: %s" @@ -1584,53 +1615,53 @@ msgstr "eroare DBus: %s" msgid "attempt to set an IPv6 server address via DBus - no IPv6 support" msgstr "incerc să configurez un server IPv6 prin Dbus - nu este suport IPv6" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "configurăm serverele superioare prin Dbus" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "nu pot activa o interfaţă de mesaje DBus" -#: bpf.c:197 +#: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" msgstr "nu pot creea socket DHCP BPF: %s" -#: bpf.c:225 +#: bpf.c:273 #, fuzzy, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "cerere DHCP pentru dispozitiv nesuportat (%d) recepÅ£ionată prin %s" -#: helper.c:145 +#: helper.c:151 msgid "lease() function missing in Lua script" msgstr "" -#: tftp.c:290 +#: tftp.c:303 msgid "unable to get free port for TFTP" msgstr "" -#: tftp.c:306 +#: tftp.c:319 #, c-format msgid "unsupported request from %s" msgstr "" -#: tftp.c:420 +#: tftp.c:433 #, fuzzy, c-format msgid "file %s not found" msgstr "împrumutul nu a fost găsit" -#: tftp.c:529 +#: tftp.c:542 #, c-format msgid "error %d %s received from %s" msgstr "" -#: tftp.c:571 +#: tftp.c:584 #, fuzzy, c-format msgid "failed sending %s to %s" msgstr "nu pot citi %s: %s" -#: tftp.c:571 +#: tftp.c:584 #, c-format msgid "sent %s to %s" msgstr "" @@ -1654,187 +1685,203 @@ msgstr "pornirea A EÅžUAT" msgid "Conntrack connection mark retrieval failed: %s" msgstr "" -#: dhcp6.c:49 +#: dhcp6.c:59 #, fuzzy, c-format msgid "cannot create DHCPv6 socket: %s" msgstr "nu pot creea socket DHCP: %s" -#: dhcp6.c:62 +#: dhcp6.c:80 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" msgstr "configurarea SO_REUSEADDR pe socket-ul DHCP a eÅŸuat: %s" -#: dhcp6.c:74 +#: dhcp6.c:92 #, fuzzy, c-format msgid "failed to bind DHCPv6 server socket: %s" msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s" -#: rfc3315.c:135 +#: rfc3315.c:149 #, fuzzy, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s" -#: rfc3315.c:144 +#: rfc3315.c:158 #, fuzzy, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s" -#: rfc3315.c:269 +#: rfc3315.c:289 #, fuzzy, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "nici un domeniu de adrese disponibil pentru cererea DHCP %s %s" -#: rfc3315.c:350 +#: rfc3315.c:370 #, fuzzy, c-format msgid "%u vendor class: %u" msgstr "eroare DBus: %s" -#: rfc3315.c:609 +#: rfc3315.c:418 +#, fuzzy, c-format +msgid "%u client MAC address: %s" +msgstr "nu exista interfaţă pentru adresa %s" + +#: rfc3315.c:650 #, fuzzy, c-format msgid "unknown prefix-class %d" msgstr "împrumut necunoscut" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "" -#: rfc3315.c:756 rfc3315.c:758 rfc3315.c:862 rfc3315.c:864 +#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 #, fuzzy msgid "no addresses available" msgstr "nici o adresă disponibilă" -#: rfc3315.c:806 +#: rfc3315.c:855 #, fuzzy msgid "address unavailable" msgstr "adresă indisponibilă" -#: rfc3315.c:841 +#: rfc3315.c:890 msgid "not on link" msgstr "" -#: rfc3315.c:915 rfc3315.c:1073 rfc3315.c:1150 +#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 msgid "no binding found" msgstr "" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "" -#: rfc3315.c:951 +#: rfc3315.c:1006 #, fuzzy msgid "address invalid" msgstr "adresa este folosită" -#: rfc3315.c:992 +#: rfc3315.c:1048 msgid "confirm failed" msgstr "" -#: rfc3315.c:1003 +#: rfc3315.c:1059 #, fuzzy msgid "all addresses still on link" msgstr "adresă greÅŸită în %s, linia %d" -#: rfc3315.c:1082 +#: rfc3315.c:1147 msgid "release received" msgstr "" +#: rfc3315.c:2038 +msgid "Cannot multicast to DHCPv6 server without correct interface" +msgstr "" + #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" msgstr "" -#: dhcp-common.c:215 +#: dhcp-common.c:222 #, c-format msgid "%u tags: %s" msgstr "" -#: dhcp-common.c:296 +#: dhcp-common.c:407 #, c-format msgid "%s has more than one address in hostsfile, using %s for DHCP" msgstr "" -#: dhcp-common.c:319 +#: dhcp-common.c:430 #, c-format msgid "duplicate IP address %s (%s) in dhcp-config directive" msgstr "adresă IP duplicat %s (%s) în declaraÅ£ia dhcp-config." -#: dhcp-common.c:367 +#: dhcp-common.c:484 #, fuzzy, c-format msgid "failed to set SO_BINDTODEVICE on DHCP socket: %s" msgstr "configurarea SO_REUSEADDR pe socket-ul DHCP a eÅŸuat: %s" -#: dhcp-common.c:489 +#: dhcp-common.c:606 #, c-format msgid "Known DHCP options:\n" msgstr "" -#: dhcp-common.c:500 +#: dhcp-common.c:617 #, c-format msgid "Known DHCPv6 options:\n" msgstr "" -#: dhcp-common.c:693 +#: dhcp-common.c:814 msgid ", prefix deprecated" msgstr "" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr "" -#: dhcp-common.c:727 +#: dhcp-common.c:849 #, c-format msgid "%s stateless on %s%.0s%.0s%s" msgstr "" -#: dhcp-common.c:729 +#: dhcp-common.c:851 #, fuzzy, c-format msgid "%s, static leases only on %.0s%s%s%.0s" msgstr "DHCP, împrumuturi statice doar către %.0s%s, timpul reînoirii %s" -#: dhcp-common.c:731 +#: dhcp-common.c:853 #, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "" -#: dhcp-common.c:732 +#: dhcp-common.c:854 #, fuzzy, c-format msgid "%s, IP range %s -- %s%s%.0s" msgstr "DHCP, domeniu IP %s -- %s, timpul reînoirii %s" -#: dhcp-common.c:739 +#: dhcp-common.c:861 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "" -#: dhcp-common.c:742 +#: dhcp-common.c:864 #, fuzzy, c-format msgid "router advertisement on %s%s" msgstr "DHCP, împrumuturi statice doar către %.0s%s, timpul reînoirii %s" -#: radv.c:87 +#: dhcp-common.c:875 +#, c-format +msgid "DHCP relay from %s to %s via %s" +msgstr "" + +#: dhcp-common.c:877 +#, c-format +msgid "DHCP relay from %s to %s" +msgstr "" + +#: radv.c:93 #, fuzzy, c-format msgid "cannot create ICMPv6 socket: %s" msgstr "nu pot creea socket DHCP: %s" -#: auth.c:402 +#: auth.c:435 #, c-format msgid "ignoring zone transfer request from %s" msgstr "" -#: ipset.c:71 +#: ipset.c:95 #, fuzzy, c-format msgid "failed to find kernel version: %s" msgstr "activarea socket-ului server-ului DHCP a eÅŸuat: %s" -#: ipset.c:90 +#: ipset.c:114 #, fuzzy, c-format msgid "failed to create IPset control socket: %s" msgstr "creearea socket-ului de ascultare a eÅŸuat: %s" -#~ msgid "no interface with address %s" -#~ msgstr "nu exista interfaţă pentru adresa %s" - #~ msgid "duplicate IP address %s in dhcp-config directive." #~ msgstr "adresă IP duplicat %s în declaraÅ£ia dhcp-config." From e4e9b342a7d6d8d8746d5d79cad9f6abb10b67a6 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 2 Oct 2013 11:00:45 +0100 Subject: [PATCH 32/67] Cosmetic change to start-up logging of DHCPv6 configuration. --- src/dhcp-common.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/dhcp-common.c b/src/dhcp-common.c index 7e99fc9..1ee2042 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -857,6 +857,11 @@ void log_context(int family, struct dhcp_context *context) } #ifdef HAVE_DHCP6 + if (context->flags & CONTEXT_TEMPLATE) + { + strcpy(daemon->addrbuff, context->template_interface); + template = ""; + } if ((context->flags & CONTEXT_RA_NAME) && !(context->flags & CONTEXT_OLD)) my_syslog(MS_DHCP | LOG_INFO, _("DHCPv4-derived IPv6 names on %s%s"), daemon->addrbuff, template); From b7f666ff0914b949661506129d78c20ca4987423 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 2 Oct 2013 11:44:59 +0100 Subject: [PATCH 33/67] Add *.po target to cannonicalise .po files received from translators. --- Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Makefile b/Makefile index b4178bc..be809d5 100644 --- a/Makefile +++ b/Makefile @@ -114,6 +114,11 @@ merge : echo -n msgmerge $(PO)/$$f && $(MSGMERGE) --no-wrap -U $(PO)/$$f $(BUILDDIR)/dnsmasq.pot; \ done +# Cannonicalise .po file. +%.po : + @cd $(BUILDDIR) && $(MAKE) -f $(top)/Makefile dnsmasq.pot + mv $(PO)/$*.po $(PO)/$*.po.orig && $(MSGMERGE) --no-wrap $(PO)/$*.po.orig $(BUILDDIR)/dnsmasq.pot >$(PO)/$*.po; + $(BUILDDIR): mkdir -p $(BUILDDIR) From 889d8a156f5fde16f62d04ac145ce51da933c007 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 2 Oct 2013 13:12:09 +0100 Subject: [PATCH 34/67] Update Polish translation. --- CHANGELOG | 2 ++ po/pl.po | 59 +++++++++++++++++++++++++------------------------------ 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c0c6661..3ee172a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -125,6 +125,8 @@ version 2.67 range. This was originally to avoid SLAAC addresses, but we now explicitly autoconfig and privacy addresses instead. + Update Polish translation. Thanks to Jan Psota. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/po/pl.po b/po/pl.po index 7b96fbe..61d72e9 100644 --- a/po/pl.po +++ b/po/pl.po @@ -10,15 +10,15 @@ msgstr "" "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 20:57+0100\n" -"PO-Revision-Date: 2013-04-02 01:44+0200\n" +"PO-Revision-Date: 2013-10-01 23:23+0200\n" "Last-Translator: Jan Psota \n" "Language-Team: polski <>\n" -"Language: \n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: poedit-1.4.6.1\n" +"Content-Transfer-Encoding: 8bits\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Gtranslator 2.91.6\n" "X-Language: pl_PL\n" #: cache.c:808 @@ -535,7 +535,7 @@ msgstr "Traktowanie wskazanych serwerów poÅ›redniczÄ…cych DHCP jako dziaÅ‚ajÄ…c #: option.c:394 msgid "Relay DHCP requests to a remote server" -msgstr "" +msgstr "Przekazywanie żądaÅ„ DHCP do zdalnego serwera" #: option.c:395 msgid "Specify alias name for LOCAL DNS name." @@ -579,7 +579,7 @@ msgstr "Załączenie anonsowania (RA) na interfejsach serwujÄ…cych DHCPv6" #: option.c:405 msgid "Always send frequent router-advertisements" -msgstr "" +msgstr "RozsyÅ‚anie wielokrotne anonsów rutera (RA)" #: option.c:406 msgid "Specify DUID_EN-type DHCPv6 server DUID" @@ -627,7 +627,7 @@ msgstr "Wyszczególnienie ipset-ów, do których bÄ™dÄ… dopisywane adresy IP le #: option.c:417 msgid "Specify a domain and address range for sythesised names" -msgstr "" +msgstr "OkreÅ›lenie domeny i zakresu adresów dla tworzonych nazw" #: option.c:419 msgid "Specify DHCPv6 prefix class" @@ -775,28 +775,24 @@ msgid "inconsistent DHCP range" msgstr "niespójny zakres adresów DHCP" #: option.c:2459 -#, fuzzy msgid "prefix length must be exactly 64 for RA subnets" -msgstr "prefix musi mieć wartość =64 dla podsieci RA" +msgstr "dÅ‚ugość prefiksu musi wynosić dokÅ‚adnie 64 dla podsieci RA" #: option.c:2461 -#, fuzzy msgid "prefix length must be exactly 64 for subnet constructors" -msgstr "prefix dla podsieci musi wynosić równo 64" +msgstr "dÅ‚ugość prefiksu musi wynosić dokÅ‚adnie 64 dla konstruktorów podsieci" #: option.c:2465 -#, fuzzy msgid "prefix length must be at least 64" -msgstr "prefix musi mieć wartość >=64" +msgstr "dÅ‚ugość prefiksu musi wynosić co najmniej 64" #: option.c:2468 msgid "inconsistent DHCPv6 range" msgstr "niespójny zakres adresów DHCPv6" #: option.c:2479 -#, fuzzy msgid "prefix must be zero with \"constructor:\" argument" -msgstr "prefix dla podsieci musi wynosić równo 64" +msgstr "prefiks musi wynosić zero z argumentem \"constructor:\"" #: option.c:2590 option.c:2638 msgid "bad hex constant" @@ -828,9 +824,8 @@ msgid "bad dhcp-proxy address" msgstr "zÅ‚y adres dhcp-proxy" #: option.c:3210 -#, fuzzy msgid "Bad dhcp-relay" -msgstr "nieprawidÅ‚owy zakres dhcp-range" +msgstr "zÅ‚y dhcp-relay" #: option.c:3220 msgid "bad DUID" @@ -1020,9 +1015,9 @@ msgid "possible DNS-rebind attack detected: %s" msgstr "prawdopodobnie wykryto atak DNS-rebind: %s" #: forward.c:1216 -#, fuzzy, c-format +#, c-format msgid "Maximum number of concurrent DNS queries reached (max: %d)" -msgstr "Maksymalna liczba jednoczeÅ›nie obsÅ‚ugiwanych zapytaÅ„ DNS (domyÅ›lnie: %s)" +msgstr "OsiÄ…gniÄ™to granicznÄ… ilość jednoczeÅ›nie obsÅ‚ugiwanych zapytaÅ„ DNS (maks: %d)" #: network.c:551 #, c-format @@ -1212,7 +1207,7 @@ msgstr "włączono asynchroniczny tryb zapisu do logów z kolejkÄ… na %d komunik #: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" -msgstr "anonsowanie routera IPv4 włączone" +msgstr "anonsowanie rutera IPv6 włączone" #: dnsmasq.c:676 msgid "root is " @@ -1367,7 +1362,7 @@ msgstr "w %s pomijam liniÄ™ %d -- powtórzona nazwa lub adres IP" #: dhcp.c:993 rfc3315.c:2047 #, c-format msgid "DHCP relay %s -> %s" -msgstr "" +msgstr "przekazywanie DHCP %s -> %s" #: lease.c:61 #, c-format @@ -1685,9 +1680,9 @@ msgid "%u vendor class: %u" msgstr "%u klasa dostawcy: %u" #: rfc3315.c:418 -#, fuzzy, c-format +#, c-format msgid "%u client MAC address: %s" -msgstr "klient %u przedstawia siÄ™ jako %s" +msgstr "adres MAC klienta %u: %s" #: rfc3315.c:650 #, c-format @@ -1736,7 +1731,7 @@ msgstr "adres zostaÅ‚ zwolniony" #: rfc3315.c:2038 msgid "Cannot multicast to DHCPv6 server without correct interface" -msgstr "" +msgstr "Nie mogÄ™ rozesÅ‚ać do serwerów DHCPv6 nie majÄ…c prawidÅ‚owego interfejsu" #: dhcp-common.c:145 #, c-format @@ -1802,25 +1797,25 @@ msgstr "%s, wykryto poÅ›rednika na podsieci %.0s%s%.0s%.0s" msgid "%s, IP range %s -- %s%s%.0s" msgstr "%s, zakres IP %s -- %s%s%.0s" -#: dhcp-common.c:861 +#: dhcp-common.c:866 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "pochodzÄ…ce z DHCPv4 nazwy IPv6 na %s%s" -#: dhcp-common.c:864 +#: dhcp-common.c:869 #, c-format msgid "router advertisement on %s%s" -msgstr "anonsowanie routera na %s%s" +msgstr "anonsowanie rutera na %s%s" -#: dhcp-common.c:875 +#: dhcp-common.c:880 #, c-format msgid "DHCP relay from %s to %s via %s" -msgstr "" +msgstr "przekazywanie DHCP z %s do %s za pomocÄ… %s" -#: dhcp-common.c:877 +#: dhcp-common.c:882 #, c-format msgid "DHCP relay from %s to %s" -msgstr "" +msgstr "przekazywanie DHCP z %s do %s" #: radv.c:93 #, c-format From 1d1c7956014513efd4ff3926a40178256e9e1913 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 2 Oct 2013 14:52:23 +0100 Subject: [PATCH 35/67] Tweak tag->debian package version code so rc tags are later than test ones. --- debian/rules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/rules b/debian/rules index ca1f0c9..7b9f4da 100755 --- a/debian/rules +++ b/debian/rules @@ -25,7 +25,7 @@ DEB_BUILD_ARCH_OS := $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS) # Force package version based on git tags. ifneq (,$(filter gitversion,$(DEB_BUILD_OPTIONS))) - PACKAGE_VERSION = $(shell bld/get-version `pwd` | sed 's/[a-z]/~&/; s/-/./g; s/$$/-1/; s/^/-v/';) + PACKAGE_VERSION = $(shell bld/get-version `pwd` | sed 's/test/~&/; s/[a-z]/~&/; s/-/./g; s/$$/-1/; s/^/-v/';) endif ifeq (,$(filter nodbus,$(DEB_BUILD_OPTIONS))) From ef1d7425e31df52f6d9c1427516ed55a0f8513ff Mon Sep 17 00:00:00 2001 From: Tanguy Bouzeloc Date: Thu, 3 Oct 2013 11:06:31 +0100 Subject: [PATCH 36/67] Fix problem in DHCPv6 vendorclass/userclass matching code. --- CHANGELOG | 3 +++ src/rfc3315.c | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3ee172a..5168189 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -127,6 +127,9 @@ version 2.67 Update Polish translation. Thanks to Jan Psota. + Fix problem in DHCPv6 vendorclass/userclass matching + code. Thanks to Tanguy Bouzeloc for the patch. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/src/rfc3315.c b/src/rfc3315.c index 11b0da5..bbdc5a8 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -66,6 +66,10 @@ static void calculate_times(struct dhcp_context *context, unsigned int *min_time #define opt6_type(opt) (opt6_uint(opt, -4, 2)) #define opt6_ptr(opt, i) ((void *)&(((unsigned char *)(opt))[4+(i)])) +#define opt6_user_vendor_ptr(opt, i) ((void *)&(((unsigned char *)(opt))[2+(i)])) +#define opt6_user_vendor_len(opt) ((int)(opt6_uint(opt, -4, 2))) +#define opt6_user_vendor_next(opt, end) (opt6_next(((void *) opt) - 2, end)) + unsigned short dhcp6_reply(struct dhcp_context *context, int interface, char *iface_name, struct in6_addr *fallback, size_t sz, struct in6_addr *client_addr, time_t now) @@ -355,9 +359,10 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ offset = 4; } - for (enc_opt = opt6_ptr(opt, offset); enc_opt; enc_opt = opt6_next(enc_opt, enc_end)) - for (i = 0; i <= (opt6_len(enc_opt) - vendor->len); i++) - if (memcmp(vendor->data, opt6_ptr(enc_opt, i), vendor->len) == 0) + /* Note that format if user/vendor classes is different to DHCP options - no option types. */ + for (enc_opt = opt6_ptr(opt, offset); enc_opt; enc_opt = opt6_user_vendor_next(enc_opt, enc_end)) + for (i = 0; i <= (opt6_user_vendor_len(enc_opt) - vendor->len); i++) + if (memcmp(vendor->data, opt6_user_vendor_ptr(enc_opt, i), vendor->len) == 0) { vendor->netid.next = state->tags; state->tags = &vendor->netid; From 903650af67e1a6fb06c64a99ac322bd440e6106a Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 3 Oct 2013 11:43:09 +0100 Subject: [PATCH 37/67] Further fixes to DHCP logging. --- src/dhcp-common.c | 33 ++++++++++++++++++++++----------- src/helper.c | 4 +++- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/dhcp-common.c b/src/dhcp-common.c index 1ee2042..ecdb448 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -830,11 +830,11 @@ void log_context(int family, struct dhcp_context *context) if (indextoname(daemon->icmp6fd, context->if_index, ifrn_name)) sprintf(p, "%s for %s", (context->flags & CONTEXT_OLD) ? "old prefix" : "constructed", ifrn_name); } - else if (context->flags & CONTEXT_TEMPLATE) + else if (context->flags & CONTEXT_TEMPLATE && !(context->flags & CONTEXT_RA_STATELESS)) { template = p; p += sprintf(p, ", "); - + sprintf(p, "template for %s", context->template_interface); } #endif @@ -842,17 +842,27 @@ void log_context(int family, struct dhcp_context *context) if (!(context->flags & CONTEXT_OLD) && ((context->flags & CONTEXT_DHCP) || family == AF_INET)) { - inet_ntop(family, start, daemon->dhcp_buff, 256); +#ifdef HAVE_DHCP6 + if (context->flags & CONTEXT_RA_STATELESS) + { + if (context->flags & CONTEXT_TEMPLATE) + strncpy(daemon->dhcp_buff, context->template_interface, 256); + else + strcpy(daemon->dhcp_buff, daemon->addrbuff); + } + else +#endif + inet_ntop(family, start, daemon->dhcp_buff, 256); inet_ntop(family, end, daemon->dhcp_buff3, 256); my_syslog(MS_DHCP | LOG_INFO, - (context->flags & CONTEXT_RA_STATELESS) ? - _("%s stateless on %s%.0s%.0s%s") : - (context->flags & CONTEXT_STATIC) ? - _("%s, static leases only on %.0s%s%s%.0s") : - (context->flags & CONTEXT_PROXY) ? - _("%s, proxy on subnet %.0s%s%.0s%.0s") : - _("%s, IP range %s -- %s%s%.0s"), - (family != AF_INET) ? "DHCPv6" : "DHCP", + (context->flags & CONTEXT_RA_STATELESS) ? + _("%s stateless on %s%.0s%.0s%s") : + (context->flags & CONTEXT_STATIC) ? + _("%s, static leases only on %.0s%s%s%.0s") : + (context->flags & CONTEXT_PROXY) ? + _("%s, proxy on subnet %.0s%s%.0s%.0s") : + _("%s, IP range %s -- %s%s%.0s"), + (family != AF_INET) ? "DHCPv6" : "DHCP", daemon->dhcp_buff, daemon->dhcp_buff3, daemon->namebuff, template); } @@ -862,6 +872,7 @@ void log_context(int family, struct dhcp_context *context) strcpy(daemon->addrbuff, context->template_interface); template = ""; } + if ((context->flags & CONTEXT_RA_NAME) && !(context->flags & CONTEXT_OLD)) my_syslog(MS_DHCP | LOG_INFO, _("DHCPv4-derived IPv6 names on %s%s"), daemon->addrbuff, template); diff --git a/src/helper.c b/src/helper.c index e979b0d..5872e6a 100644 --- a/src/helper.c +++ b/src/helper.c @@ -64,8 +64,10 @@ struct script_data #ifdef HAVE_TFTP off_t file_len; #endif -#ifdef HAVE_DHCP6 +#ifdef HAVE_IPV6 struct in6_addr addr6; +#endif +#ifdef HAVE_DHCP6 int iaid, vendorclass_count; #endif unsigned char hwaddr[DHCP_CHADDR_MAX]; From d4da20f064f4d155ad27f1595893e5b0a6c4c5e1 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 4 Oct 2013 10:12:49 +0100 Subject: [PATCH 38/67] Unset environment variables to script when we have no value for them. --- src/helper.c | 93 ++++++++++++++++++++++++++-------------------------- 1 file changed, 46 insertions(+), 47 deletions(-) diff --git a/src/helper.c b/src/helper.c index 5872e6a..24c2afd 100644 --- a/src/helper.c +++ b/src/helper.c @@ -481,20 +481,13 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) if (data.action != ACTION_TFTP) { #ifdef HAVE_DHCP6 - if (is6) - { - my_setenv("DNSMASQ_IAID", daemon->dhcp_buff3, &err); - my_setenv("DNSMASQ_SERVER_DUID", daemon->dhcp_packet.iov_base, &err); - if (data.hwaddr_len != 0) - my_setenv("DNSMASQ_MAC", daemon->dhcp_buff, &err); - } + my_setenv("DNSMASQ_IAID", is6 ? daemon->dhcp_buff3 : NULL, &err); + my_setenv("DNSMASQ_SERVER_DUID", is6 ? daemon->dhcp_packet.iov_base : NULL, &err); + my_setenv("DNSMASQ_MAC", is6 && data.hwaddr_len != 0 ? daemon->dhcp_buff : NULL, &err); #endif - if (!is6 && data.clid_len != 0) - my_setenv("DNSMASQ_CLIENT_ID", daemon->packet, &err); - - if (strlen(data.interface) != 0) - my_setenv("DNSMASQ_INTERFACE", data.interface, &err); + my_setenv("DNSMASQ_CLIENT_ID", !is6 && data.clid_len != 0 ? daemon->packet : NULL, &err); + my_setenv("DNSMASQ_INTERFACE", strlen(data.interface) != 0 ? data.interface : NULL, &err); #ifdef HAVE_BROKEN_RTC sprintf(daemon->dhcp_buff2, "%u", data.length); @@ -504,8 +497,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) my_setenv("DNSMASQ_LEASE_EXPIRES", daemon->dhcp_buff2, &err); #endif - if (domain) - my_setenv("DNSMASQ_DOMAIN", domain, &err); + my_setenv("DNSMASQ_DOMAIN", domain, &err); end = extradata + data.ed_len; buf = extradata; @@ -543,8 +535,8 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) if (is6) buf = grab_extradata(buf, end, "DNSMASQ_RELAY_ADDRESS", &err); - else if (data.giaddr.s_addr != 0) - my_setenv("DNSMASQ_RELAY_ADDRESS", inet_ntoa(data.giaddr), &err); + else + my_setenv("DNSMASQ_RELAY_ADDRESS", data.giaddr.s_addr != 0 ? inet_ntoa(data.giaddr) : NULL, &err); for (i = 0; buf; i++) { @@ -552,22 +544,16 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) buf = grab_extradata(buf, end, daemon->dhcp_buff2, &err); } - if (data.action != ACTION_DEL && data.remaining_time != 0) - { - sprintf(daemon->dhcp_buff2, "%u", data.remaining_time); - my_setenv("DNSMASQ_TIME_REMAINING", daemon->dhcp_buff2, &err); - } + sprintf(daemon->dhcp_buff2, "%u", data.remaining_time); + my_setenv("DNSMASQ_TIME_REMAINING", data.action != ACTION_DEL && data.remaining_time != 0 ? daemon->dhcp_buff2 : NULL, &err); - if (data.action == ACTION_OLD_HOSTNAME && hostname) - { - my_setenv("DNSMASQ_OLD_HOSTNAME", hostname, &err); - hostname = NULL; - } + my_setenv("DNSMASQ_OLD_HOSTNAME", data.action == ACTION_OLD_HOSTNAME ? hostname : NULL, &err); + if (data.action == ACTION_OLD_HOSTNAME) + hostname = NULL; } - if (option_bool(OPT_LOG_OPTS)) - my_setenv("DNSMASQ_LOG_DHCP", "1", &err); - + my_setenv("DNSMASQ_LOG_DHCP", option_bool(OPT_LOG_OPTS) ? "1" : NULL, &err); + /* we need to have the event_fd around if exec fails */ if ((i = fcntl(event_fd, F_GETFD)) != -1) fcntl(event_fd, F_SETFD, i | FD_CLOEXEC); @@ -590,31 +576,44 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd) static void my_setenv(const char *name, const char *value, int *error) { - if (*error == 0 && setenv(name, value, 1) != 0) - *error = errno; + if (*error == 0) + { + if (!value) + unsetenv(name); + else if (setenv(name, value, 1) != 0) + *error = errno; + } } static unsigned char *grab_extradata(unsigned char *buf, unsigned char *end, char *env, int *err) { - unsigned char *next; + unsigned char *next = NULL; + char *val = NULL; - if (!buf || (buf == end)) - return NULL; - - for (next = buf; *next != 0; next++) - if (next == end) - return NULL; - - if (next != buf) + if (buf && (buf != end)) { - char *p; - /* No "=" in value */ - if ((p = strchr((char *)buf, '='))) - *p = 0; - my_setenv(env, (char *)buf, err); - } + for (next = buf; ; next++) + if (next == end) + { + next = NULL; + break; + } + else if (*next == 0) + break; - return next + 1; + if (next && (next != buf)) + { + char *p; + /* No "=" in value */ + if ((p = strchr((char *)buf, '='))) + *p = 0; + val = (char *)buf; + } + } + + my_setenv(env, val, err); + + return next ? next + 1 : NULL; } #ifdef HAVE_LUASCRIPT From 043c271f8a4bc7be157f938f5d581e79d9c1f4d2 Mon Sep 17 00:00:00 2001 From: Vic Date: Fri, 4 Oct 2013 15:09:13 +0100 Subject: [PATCH 39/67] Update Spanish translation. --- CHANGELOG | 2 + po/es.po | 396 +++++++++++++++++++++++++++--------------------------- 2 files changed, 200 insertions(+), 198 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 5168189..d76eb7a 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -130,7 +130,9 @@ version 2.67 Fix problem in DHCPv6 vendorclass/userclass matching code. Thanks to Tanguy Bouzeloc for the patch. + Update Spanish transalation. Thanks to Vicente Soriano. + version 2.66 Add the ability to act as an authoritative DNS server. Dnsmasq can now answer queries from the wider 'net diff --git a/po/es.po b/po/es.po index e9b82ee..9272015 100644 --- a/po/es.po +++ b/po/es.po @@ -4,12 +4,12 @@ # msgid "" msgstr "" -"Project-Id-Version: dnsmasq 2.24\n" +"Project-Id-Version: dnsmasq 2.67\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-18 12:24+0100\n" -"PO-Revision-Date: 2005-10-07 11:04+0100\n" -"Last-Translator: Christopher Chatham \n" -"Language-Team: Spanish \n" +"PO-Revision-Date: 2013-10-04 13:24+0100\n" +"Last-Translator: Vicente Soriano \n" +"Language-Team:\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" @@ -48,12 +48,12 @@ msgstr "" #: cache.c:1061 #, c-format msgid "%s is a CNAME, not giving it to the DHCP lease of %s" -msgstr "%s es un CNAME, no se le está dando al arriendo DHCP de %s" +msgstr "%s es un CNAME, no se le está dando concesión DHCP de %s" #: cache.c:1085 #, c-format msgid "not giving name %s to the DHCP lease of %s because the name exists in %s with address %s" -msgstr "no otorgando nombre %s al arriendo DHCP de %s porque el nombre existe en %s con dirección %s" +msgstr "no otorgando nombre %s a concesión DHCP de %s porque el nombre existe en %s con dirección %s" #: cache.c:1130 #, c-format @@ -152,7 +152,7 @@ msgstr "No reenviar pedidos DNS falsos desde m #: option.c:303 msgid "Enable DHCP in the range given with lease duration." -msgstr "Habilitar DHCP dentro del rango brindado con duración del arriendo." +msgstr "Habilitar DHCP dentro del rango brindado con duración de concesión." #: option.c:304 #, c-format @@ -189,11 +189,11 @@ msgstr "Especificar un archivo de hosts para ser le #: option.c:311 msgid "Specify interface(s) to listen on." -msgstr "Especificar interface(s) donde escuchar." +msgstr "Especificar interfase(s) donde escuchar." #: option.c:312 msgid "Specify interface(s) NOT to listen on." -msgstr "Especificar interface(s) donde NO escuchar." +msgstr "Especificar interfase(s) donde NO escuchar." #: option.c:313 #, fuzzy @@ -233,7 +233,7 @@ msgstr "Asumir que somos el #: option.c:321 #, c-format msgid "Specify where to store DHCP leases (defaults to %s)." -msgstr "Especificar donde almacenar arriendos DHCP (%s por predeterminado)." +msgstr "Especificar donde almacenar concesión DHCP (%s por predeterminado)." #: option.c:322 msgid "Return MX records for local hosts." @@ -287,7 +287,7 @@ msgstr "Bitacorear b #: option.c:333 #, fuzzy msgid "Force the originating port for upstream DNS queries." -msgstr "Enforzar el puerto original para búsquedas DNS upstream." +msgstr "Enforzar el puerto original para búsquedas DNS subida." #: option.c:334 msgid "Do NOT read resolv.conf." @@ -300,7 +300,7 @@ msgstr "Especificar el path hacia resolv.conf (%s por predeterminado)." #: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." -msgstr "Especificar dirección(es) de servidores upstream con dominios opcionales." +msgstr "Especificar dirección(es) de servidores subida con dominios opcionales." #: option.c:337 msgid "Never forward queries to specified domains." @@ -308,7 +308,7 @@ msgstr "Nunca reenviar b #: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." -msgstr "Especificar el dominio para ser asignado en arriendos DHCP." +msgstr "Especificar el dominio para ser asignado en concesión DHCP." #: option.c:339 msgid "Specify default target in an MX record." @@ -344,7 +344,7 @@ msgstr "Mostrar informaci #: option.c:346 msgid "Translate IPv4 addresses from upstream servers." -msgstr "Traducir direcciones IPv4 desde servidores upstream." +msgstr "Traducir direcciones IPv4 desde servidores subida." #: option.c:347 msgid "Specify a SRV record." @@ -362,11 +362,11 @@ msgstr "Especificar path de archivo PID (%s por predeterminado)." #: option.c:350 #, c-format msgid "Specify maximum number of DHCP leases (defaults to %s)." -msgstr "Especificar número máximo de arriendos DHCP (%s por predeterminado)." +msgstr "Especificar número máximo de concesión DHCP (%s por predeterminado)." #: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." -msgstr "Responder a búsquedas DNS en base a la interface a la cuál fueron enviadas." +msgstr "Responder a búsquedas DNS en base a la interfase a la cuál fueron enviadas." #: option.c:352 msgid "Specify TXT DNS record." @@ -379,11 +379,11 @@ msgstr "Especificar expediente DNS PTR." #: option.c:354 msgid "Give DNS name to IPv4 address of interface." -msgstr "Otorgar nombre DNS a dirección IPv4 de interface." +msgstr "Otorgar nombre DNS a dirección IPv4 de interfase." #: option.c:355 msgid "Bind only to interfaces in use." -msgstr "Acoplar solo a interfaces en uso." +msgstr "Acoplar solo a interfases en uso." #: option.c:356 #, c-format @@ -392,11 +392,11 @@ msgstr "Leer informaci #: option.c:357 msgid "Enable the DBus interface for setting upstream servers, etc." -msgstr "Habilitar la interface DBus para fijar servidores upstream, etc." +msgstr "Habilitar la interfase DBus para fijar servidores subida, etc." #: option.c:358 msgid "Do not provide DHCP on this interface, only provide DNS." -msgstr "No proveer DHCP en esta interface, sólo proveer DNS." +msgstr "No proveer DHCP en esta interfase, sólo proveer DNS." #: option.c:359 msgid "Enable dynamic address allocation for bootp." @@ -409,7 +409,7 @@ msgstr "Trazar direcci #: option.c:361 msgid "Treat DHCP requests on aliases as arriving from interface." -msgstr "Tratar pedidos DHCP en alias como si llegaran de la interface." +msgstr "Tratar pedidos DHCP en alias como si llegaran de la interfase." #: option.c:362 msgid "Disable ICMP echo address checking in the DHCP server." @@ -418,17 +418,17 @@ msgstr "Deshabilitar verificaci #: option.c:363 #, fuzzy msgid "Shell script to run on DHCP lease creation and destruction." -msgstr "Archivo guión para ejecutar cuando se crea o destruye un arriendo DHCP." +msgstr "Archivo guión para ejecutar cuando se crea o destruye una concesión DHCP." #: option.c:364 #, fuzzy msgid "Lua script to run on DHCP lease creation and destruction." -msgstr "Archivo guión para ejecutar cuando se crea o destruye un arriendo DHCP." +msgstr "Archivo guión para ejecutar cuando se crea o destruye una concesión DHCP." #: option.c:365 #, fuzzy msgid "Run lease-change scripts as this user." -msgstr "Correr archivo guión de cambio de arriendos como este usuario." +msgstr "Correr archivo guión de cambio de concesión como este usuario." #: option.c:366 msgid "Read configuration from all the files in this directory." @@ -441,7 +441,7 @@ msgstr "Bitacorear a esta facilidad syslog o archivo. (DAEMON por predeterminado #: option.c:368 msgid "Do not use leasefile." -msgstr "No usar archivo de arriendos." +msgstr "No usar archivo de concesión." #: option.c:369 #, fuzzy, c-format @@ -488,19 +488,19 @@ msgstr "Deshabilitar la extensi #: option.c:379 msgid "Convert TFTP filenames to lowercase" -msgstr "" +msgstr "Convertir a minúsculas los nombres de archivos TFTP" #: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." -msgstr "Rango de puertos efímeros para ser usados por transferencias TFTP." +msgstr "Rango de puertos efímeros para ser usados en transferencias TFTP." #: option.c:381 msgid "Extra logging for DHCP." -msgstr "Bitacoreo extra para DHCP." +msgstr "Log extra para DHCP." #: option.c:382 msgid "Enable async. logging; optionally set queue length." -msgstr "Habilitar bitacoreo asincrónico; opcionalmente fijar tamaño de cola." +msgstr "Habilitar registro asíncrono; opcionalmente fijar tamaño de cola." #: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." @@ -563,7 +563,7 @@ msgstr "Aviso a ser enviado a clientes PXE." #: option.c:397 msgid "Boot service for PXE menu." -msgstr "Servico boot para menú PXE." +msgstr "Servicio de arranque para menú PXE." #: option.c:398 msgid "Check configuration syntax." @@ -571,28 +571,28 @@ msgstr "Revisar sintaxis de configuraci #: option.c:399 msgid "Add requestor's MAC address to forwarded DNS queries." -msgstr "" +msgstr "Añadir direcciones MAC de los peticionarios a los filtros DNS enviados" #: option.c:400 #, fuzzy msgid "Proxy DNSSEC validation results from upstream nameservers." -msgstr "Traducir direcciones IPv4 desde servidores upstream." +msgstr "Traducir direcciones IPv4 desde servidores subida." #: option.c:401 msgid "Attempt to allocate sequential IP addresses to DHCP clients." -msgstr "" +msgstr "Intento de instaurar direcciones IP secuenciales a cliente DHCP" #: option.c:402 msgid "Copy connection-track mark from queries to upstream connections." -msgstr "" +msgstr "Copiar la marca de connection-track desde los filtros a las conexiones salientes" #: option.c:403 msgid "Allow DHCP clients to do their own DDNS updates." -msgstr "" +msgstr "Permite a clientes DHCP realizar sus propias actualizaciones DDNS" #: option.c:404 msgid "Send router-advertisements for interfaces doing DHCPv6" -msgstr "" +msgstr "Enviar anuncios del router a los interfases realizando DHCPv6" #: option.c:405 msgid "Always send frequent router-advertisements" @@ -615,43 +615,43 @@ msgstr "Especificar expediente DNS TXT." #: option.c:409 #, fuzzy msgid "Bind to interfaces in use - check for new interfaces" -msgstr "interface desconocida %s en bridge-interface" +msgstr "interfase desconocida %s en bridge-interfase" #: option.c:410 msgid "Export local names to global DNS" -msgstr "" +msgstr "Exportar nombres DNS locales a globales" #: option.c:411 msgid "Domain to export to global DNS" -msgstr "" +msgstr "Dominio a exportar a DNS global" #: option.c:412 msgid "Set TTL for authoritative replies" -msgstr "" +msgstr "Fijar TTL para respuestas autoritarias" #: option.c:413 msgid "Set authoritive zone information" -msgstr "" +msgstr "Fijar información de zona autoritaria" #: option.c:414 msgid "Secondary authoritative nameservers for forward domains" -msgstr "" +msgstr "Nombres de servidor secundario autoritatorios para dominios enviados" #: option.c:415 msgid "Peers which are allowed to do zone transfer" -msgstr "" +msgstr "Colegas autorizados a la zona de transferencia (transfer)" #: option.c:416 msgid "Specify ipsets to which matching domains should be added" -msgstr "" +msgstr "Especificar los ipsets coincidentes en dominio que debrían ser añadidos" #: option.c:417 msgid "Specify a domain and address range for sythesised names" -msgstr "" +msgstr "Especificar dominio y rango de direcciones para los nombres acrónimos" #: option.c:419 msgid "Specify DHCPv6 prefix class" -msgstr "" +msgstr "Especificar prefijo de clase DHCPv6" #: option.c:605 #, c-format @@ -678,12 +678,12 @@ msgstr "puerto err #: option.c:690 option.c:722 msgid "interface binding not supported" -msgstr "vinculación de interface no está soportado" +msgstr "vinculación de interfase no está soportado" #: option.c:699 option.c:3275 #, fuzzy msgid "bad interface name" -msgstr "nombre de interface erróneo" +msgstr "nombre de interfase erróneo" #: option.c:729 #, fuzzy @@ -692,7 +692,7 @@ msgstr "direcci #: option.c:863 msgid "unsupported encapsulation for IPv6 option" -msgstr "" +msgstr "Encapsulación no soportada para opción IPv6" #: option.c:877 msgid "bad dhcp-option" @@ -731,20 +731,20 @@ msgstr "palabra clave repetida ilegal" #: option.c:1374 option.c:3802 #, fuzzy, c-format msgid "cannot access directory %s: %s" -msgstr "no se puede accesar directorio %s: %s" +msgstr "no se puede acceder a directorio %s: %s" #: option.c:1406 tftp.c:487 #, fuzzy, c-format msgid "cannot access %s: %s" -msgstr "no se puede accesar %s: %s" +msgstr "no se puede acceder %s: %s" #: option.c:1442 msgid "setting log facility is not possible under Android" -msgstr "" +msgstr "la creación de un registro no es posible en Android" #: option.c:1451 msgid "bad log facility" -msgstr "" +msgstr "ubicación del registro errónea" #: option.c:1500 msgid "bad MX preference" @@ -760,26 +760,26 @@ msgstr "destino MX err #: option.c:1531 msgid "cannot run scripts under uClinux" -msgstr "no se pueden correr archivos guiónes bajo uClinux" +msgstr "no se pueden correr archivos 'script' bajo uClinux" #: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" -msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo" +msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de concesión" #: option.c:1537 #, fuzzy msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" -msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo" +msgstr "recompilar con HAVE_SCRIPT definido para habilitar 'scripts' en Lua" #: option.c:1739 option.c:1800 #, fuzzy msgid "bad prefix" -msgstr "puerto erróneo" +msgstr "prefijo erróneo" #: option.c:2094 #, fuzzy msgid "recompile with HAVE_IPSET defined to enable ipset directives" -msgstr "recompilar con HAVE_SCRIPT definido para habilitar guiónes de cambio de arriendo" +msgstr "recompilar con HAVE_SCRIPT definido para habilitar directivas ipset" #: option.c:2274 #, fuzzy @@ -788,7 +788,7 @@ msgstr "rango de puertos err #: option.c:2290 msgid "bad bridge-interface" -msgstr "opción bridge-interface (interface puente) errónea" +msgstr "opción bridge-interface (interfase puente) errónea" #: option.c:2350 msgid "only one tag allowed" @@ -804,15 +804,15 @@ msgstr "rango DHCP inconsistente" #: option.c:2459 msgid "prefix length must be exactly 64 for RA subnets" -msgstr "" +msgstr "la longitud del prefijo debe ser 64 exacto para subredes RA" #: option.c:2461 msgid "prefix length must be exactly 64 for subnet constructors" -msgstr "" +msgstr "la longitud del prefijo debe ser 64 exacto para subredes constructoras" #: option.c:2465 msgid "prefix length must be at least 64" -msgstr "" +msgstr "la longitud del prefijo debe ser al menos 64" #: option.c:2468 #, fuzzy @@ -821,16 +821,16 @@ msgstr "rango DHCP inconsistente" #: option.c:2479 msgid "prefix must be zero with \"constructor:\" argument" -msgstr "" +msgstr "prefijo debe ser cero con argumento \"constructor:\"" #: option.c:2590 option.c:2638 #, fuzzy msgid "bad hex constant" -msgstr "opción dhcp-host errónea" +msgstr "constante hexadecimal errónea" #: option.c:2612 msgid "cannot match tags in --dhcp-host" -msgstr "" +msgstr "no coinciden etiquetas en --dhcp-host" #: option.c:2660 #, fuzzy, c-format @@ -845,7 +845,7 @@ msgstr "nombre de host DHCP err #: option.c:2798 #, fuzzy msgid "bad tag-if" -msgstr "destino MX erróneo" +msgstr "etiqueta tag-if errónea" #: option.c:3122 option.c:3479 msgid "invalid port number" @@ -863,7 +863,7 @@ msgstr "opci #: option.c:3220 msgid "bad DUID" -msgstr "" +msgstr "DUID erróneo" #: option.c:3262 #, fuzzy @@ -881,25 +881,25 @@ msgstr "CNAME duplicado" #: option.c:3330 #, fuzzy msgid "bad PTR record" -msgstr "expediente PTR erróneo" +msgstr "registro PTR erróneo" #: option.c:3361 #, fuzzy msgid "bad NAPTR record" -msgstr "expediente NAPTR erróneo" +msgstr "registro NAPTR erróneo" #: option.c:3395 #, fuzzy msgid "bad RR record" -msgstr "expediente PTR erróneo" +msgstr "registro PTR erróneo" #: option.c:3424 msgid "bad TXT record" -msgstr "expediente TXT erróneo" +msgstr "registro TXT erróneo" #: option.c:3465 msgid "bad SRV record" -msgstr "expediente SRV erróneo" +msgstr "registro SRV erróneo" #: option.c:3472 msgid "bad SRV target" @@ -916,7 +916,7 @@ msgstr "peso inv #: option.c:3517 #, fuzzy msgid "Bad host-record" -msgstr "expediente PTR erróneo" +msgstr "registro PTR erróneo" #: option.c:3534 #, fuzzy @@ -960,16 +960,16 @@ msgstr "no se puede leer %s: %s" #: option.c:3923 option.c:3959 #, fuzzy, c-format msgid "read %s" -msgstr "leyendo %s" +msgstr "lee %s" #: option.c:4015 msgid "junk found in command line" -msgstr "" +msgstr "basura encontrada en linea de comando" #: option.c:4050 #, c-format msgid "Dnsmasq version %s %s\n" -msgstr "Dnsmasq versión %s %s\n" +msgstr "Versión dnsmasq %s %s\n" #: option.c:4051 #, fuzzy, c-format @@ -988,7 +988,7 @@ msgstr "Este software viene SIN NINGUNA GARANTIA.\n" #: option.c:4053 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" -msgstr "Dnsmasq es software libre, y usted está bienvenido a redistribuirlo\n" +msgstr "Dnsmasq es software libre, y usted está autorizado a redistribuirlo\n" #: option.c:4054 #, fuzzy, c-format @@ -1015,7 +1015,7 @@ msgstr "no se puede obtener host-name (nombre de host): %s" #: option.c:4146 msgid "only one resolv.conf file allowed in no-poll mode." -msgstr "solo un archivo resolv.conf permitido en modo no-poll." +msgstr "solo un archivo resolv.conf está permitido en modo no-poll." #: option.c:4156 msgid "must have exactly one resolv.conf to read domain from." @@ -1048,7 +1048,7 @@ msgstr "no se pudo escuchar en socket: %s" #: forward.c:490 #, c-format msgid "nameserver %s refused to do a recursive query" -msgstr "servidor DNS %s se reusó a hacer una búsqueda recursiva" +msgstr "servidor DNS %s rechazó realizar una búsqueda recursiva" #: forward.c:518 #, fuzzy, c-format @@ -1058,36 +1058,36 @@ msgstr "posible ataque de revinculaci #: forward.c:1216 #, fuzzy, c-format msgid "Maximum number of concurrent DNS queries reached (max: %d)" -msgstr "Número máximo de búsquedas DNS simultáneas. (%s por predeterminado)" +msgstr "Número máximo de búsquedas DNS simultáneas alcanzado. (%s por predeterminado)" #: network.c:551 #, fuzzy, c-format msgid "failed to create listening socket for %s: %s" -msgstr "no se pudo crear un socket escuchador: %s" +msgstr "no se pudo crear un zócalo de escucha: %s" #: network.c:882 #, fuzzy, c-format msgid "interface %s failed to join DHCPv6 multicast group: %s" -msgstr "no se pudo acoplar socket de servidor DHCP: %s" +msgstr "el interfase % falló al unirse al grupo multicast DHCPv6: %s" #: network.c:1076 #, fuzzy, c-format msgid "failed to bind server socket for %s: %s" -msgstr "no se pudo acoplar socket escuchador para %s: %s" +msgstr "no se pudo acoplar al zócalo del servidor para %s: %s" #: network.c:1113 #, c-format msgid "ignoring nameserver %s - local interface" -msgstr "ignorando servidor DNS %s - interface local" +msgstr "ignorando servidor DNS %s - interfase local" #: network.c:1124 #, fuzzy, c-format msgid "ignoring nameserver %s - cannot make/bind socket: %s" -msgstr "ignorando servidor DNS %s - no se puede crear/acoplar socket: %s" +msgstr "ignorando servidor DNS %s - no se puede crear/acoplar zócalo: %s" #: network.c:1141 msgid "unqualified" -msgstr "no calificado" +msgstr "no cualificado" #: network.c:1141 msgid "names" @@ -1109,22 +1109,22 @@ msgstr "usando direcciones locales solo para %s %s" #: network.c:1150 #, fuzzy, c-format msgid "using standard nameservers for %s %s" -msgstr "usando servidor DNS %s#%d para %s %s" +msgstr "usando nombres estándar %s#%d para %s %s" #: network.c:1152 #, c-format msgid "using nameserver %s#%d for %s %s" -msgstr "usando servidor DNS %s#%d para %s %s" +msgstr "usando nombre de servidor %s#%d para %s %s" #: network.c:1155 #, fuzzy, c-format msgid "using nameserver %s#%d(via %s)" -msgstr "usando servidor DNS %s#%d(vía %s)" +msgstr "usando nombre de servidor %s#%d(vía %s)" #: network.c:1157 #, c-format msgid "using nameserver %s#%d" -msgstr "usando servidor DNS %s#%d" +msgstr "usando nombre de servidor %s#%d" #: dnsmasq.c:134 #, fuzzy @@ -1133,7 +1133,7 @@ msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h" #: dnsmasq.c:139 msgid "Cannot use --conntrack AND --query-port" -msgstr "" +msgstr "No puede usar --conntrack AND --query-port" #: dnsmasq.c:142 #, fuzzy @@ -1143,12 +1143,12 @@ msgstr "servidor TFTP no disponible: fijar HAVE_TFTP en src/config.h" #: dnsmasq.c:147 #, fuzzy msgid "asychronous logging is not available under Solaris" -msgstr "bitacoreo asincrónico no está disponible bajo Solaris" +msgstr "registro asíncrono no está disponible bajo Solaris" #: dnsmasq.c:152 #, fuzzy msgid "asychronous logging is not available under Android" -msgstr "bitacoreo asincrónico no está disponible bajo Solaris" +msgstr "registro asíncrono no está disponible bajo Solaris" #: dnsmasq.c:157 #, fuzzy @@ -1157,25 +1157,25 @@ msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h" #: dnsmasq.c:167 msgid "zone serial must be configured in --auth-soa" -msgstr "" +msgstr "zona serie debe ser configurada en --auth-soa" #: dnsmasq.c:185 msgid "dhcp-range constructor not available on this platform" -msgstr "" +msgstr "constructor rango dhcp no disponible en esta plataforma" #: dnsmasq.c:225 msgid "cannot set --bind-interfaces and --bind-dynamic" -msgstr "" +msgstr "no puede usar --bind-interfases y --bind-dynamic" #: dnsmasq.c:229 #, c-format msgid "failed to find list of interfaces: %s" -msgstr "no se pudo encontrar lista de interfaces: %s" +msgstr "no se pudo encontrar lista de interfases: %s" #: dnsmasq.c:238 #, c-format msgid "unknown interface %s" -msgstr "interface desconocida %s" +msgstr "interfase desconocida %s" #: dnsmasq.c:275 dnsmasq.c:870 #, c-format @@ -1222,21 +1222,21 @@ msgstr "soporte DBus habilitado: conectado a bus de sistema" #: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" -msgstr "soporte DBus habilitado: conección a bus pendiente" +msgstr "soporte DBus habilitado: conexión a bus pendiente" #: dnsmasq.c:617 #, fuzzy, c-format msgid "warning: failed to change owner of %s: %s" -msgstr "advertencia: no se pudo cambiar dueño de %s: %s" +msgstr "advertencia: no se pudo cambiar propietario de %s: %s" #: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" -msgstr "fijando opción --bind-interfaces debido a limitaciones de sistema operativo" +msgstr "fijando opción --bind-interfases debido a limitaciones de sistema operativo" #: dnsmasq.c:626 #, c-format msgid "warning: interface %s does not currently exist" -msgstr "advertencia: interface %s no existe actuálmente" +msgstr "advertencia: interfase %s no existe actualmente" #: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" @@ -1245,20 +1245,20 @@ msgstr "advertencia: ignorando opci #: dnsmasq.c:634 #, fuzzy msgid "warning: no upstream servers configured" -msgstr "advertencia: ningún servidor upstream configurado" +msgstr "advertencia: ningún servidor de subida configurado" #: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" -msgstr "bitacoreo asincrónico habilitado, límite de cola es %d mensajes" +msgstr "registro asíncrono habilitado, el límite de la cola es %d mensajes" #: dnsmasq.c:659 msgid "IPv6 router advertisement enabled" -msgstr "" +msgstr "Anuncio de router IPv6 habilitado" #: dnsmasq.c:676 msgid "root is " -msgstr "root es " +msgstr "root está " #: dnsmasq.c:676 #, fuzzy @@ -1281,7 +1281,7 @@ msgstr "conectado a DBus de sistema" #: dnsmasq.c:1017 #, c-format msgid "cannot fork into background: %s" -msgstr "no se puede hacer fork hacia el fondo: %s" +msgstr "no se puede hacer fork en background: %s" #: dnsmasq.c:1020 #, fuzzy, c-format @@ -1311,27 +1311,27 @@ msgstr "no se pudo abrir archivo PID %s: %s" #: dnsmasq.c:1035 #, fuzzy, c-format msgid "cannot open log %s: %s" -msgstr "no se puede abrir %s: %s" +msgstr "no se puede abrir registro %s: %s" #: dnsmasq.c:1038 #, fuzzy, c-format msgid "failed to load Lua script: %s" -msgstr "no se pudo cargar %s: %s" +msgstr "no se pudo cargar script Lua %s: %s" #: dnsmasq.c:1041 #, c-format msgid "TFTP directory %s inaccessible: %s" -msgstr "" +msgstr "directorio TFTP % inaccesible: %s" #: dnsmasq.c:1105 #, fuzzy, c-format msgid "script process killed by signal %d" -msgstr "proceso hijo eliminado por señal %d" +msgstr "proceso script eliminado por señal %d" #: dnsmasq.c:1109 #, fuzzy, c-format msgid "script process exited with status %d" -msgstr "proceso hijo hizo exit con estado %d" +msgstr "proceso script salió con con estado %d" #: dnsmasq.c:1113 #, fuzzy, c-format @@ -1345,7 +1345,7 @@ msgstr "saliendo al recibir SIGTERM" #: dnsmasq.c:1186 #, fuzzy, c-format msgid "failed to access %s: %s" -msgstr "no se pudo accesar %s: %s" +msgstr "no se pudo acceder %s: %s" #: dnsmasq.c:1216 #, c-format @@ -1360,32 +1360,32 @@ msgstr "ning #: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" -msgstr "no se puede crear socket DHCP: %s" +msgstr "no se puede crear zócalo DHCP: %s" #: dhcp.c:68 #, c-format msgid "failed to set options on DHCP socket: %s" -msgstr "no se pudo fijar opciones en socket DHCP: %s" +msgstr "no se pudo fijar opciones en zócalo DHCP: %s" #: dhcp.c:89 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s" -msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en socket DHCP: %s" +msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en zócalo DHCP: %s" #: dhcp.c:101 #, c-format msgid "failed to bind DHCP server socket: %s" -msgstr "no se pudo acoplar socket de servidor DHCP: %s" +msgstr "no se pudo acoplar zócalo de servidor DHCP: %s" #: dhcp.c:127 #, c-format msgid "cannot create ICMP raw socket: %s." -msgstr "no se puede crear socket crudo ICMP: %s." +msgstr "no se puede crear zócalo puro ICMP: %s." #: dhcp.c:239 #, fuzzy, c-format msgid "unknown interface %s in bridge-interface" -msgstr "interface desconocida %s en bridge-interface" +msgstr "interfase desconocida %s en bridge-interface" #: dhcp.c:278 #, c-format @@ -1407,29 +1407,29 @@ msgstr "l msgid "ignoring %s line %d, duplicate name or IP address" msgstr "ignorando %s línea %d, nombre o dirección IP duplicada" -#: dhcp.c:993 rfc3315.c:2047 +#: dhcp.c:993 rfc3315.c:2052 #, c-format msgid "DHCP relay %s -> %s" -msgstr "" +msgstr "DHCP relay %s -> %s" #: lease.c:61 #, fuzzy, c-format msgid "cannot open or create lease file %s: %s" -msgstr "no se puede abrir o crear archivo de arriendos %s: %s" +msgstr "no se puede abrir o crear archivo de concesión %s: %s" #: lease.c:134 msgid "too many stored leases" -msgstr "demasiados arriendos almacenados" +msgstr "demasiadas concesiones almacenadas" #: lease.c:165 #, fuzzy, c-format msgid "cannot run lease-init script %s: %s" -msgstr "no se puede ejecutar archivo guión lease-init %s: %s" +msgstr "no se puede ejecutar archivo script lease-init %s: %s" #: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" -msgstr "archivo guión lease-init retornó exit code %s" +msgstr "archivo guión lease-init retornó código de salida %s" #: lease.c:342 #, fuzzy, c-format @@ -1459,7 +1459,7 @@ msgstr "v msgid "%u available DHCP subnet: %s/%s" msgstr "%u Subred DHCP disponible: %s/%s" -#: rfc2131.c:354 rfc3315.c:292 +#: rfc2131.c:354 rfc3315.c:296 #, fuzzy, c-format msgid "%u available DHCP range: %s -- %s" msgstr "%u Rango DHCP disponible: %s -- %s" @@ -1478,12 +1478,12 @@ msgstr "%u Clase de usuario: %s" msgid "disabled" msgstr "deshabilitado" -#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:593 rfc3315.c:813 -#: rfc3315.c:1082 +#: rfc2131.c:535 rfc2131.c:961 rfc2131.c:1379 rfc3315.c:598 rfc3315.c:818 +#: rfc3315.c:1087 msgid "ignored" msgstr "ignorado" -#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:863 +#: rfc2131.c:550 rfc2131.c:1199 rfc3315.c:868 msgid "address in use" msgstr "dirección en uso" @@ -1501,9 +1501,9 @@ msgstr "ninguna direcci #: rfc2131.c:592 rfc2131.c:1212 msgid "no leases left" -msgstr "no sobra ningún arriendo" +msgstr "no sobra ninguna concesión" -#: rfc2131.c:687 rfc3315.c:466 +#: rfc2131.c:687 rfc3315.c:471 #, fuzzy, c-format msgid "%u client provides name: %s" msgstr "%u cliente provee nombre: %s" @@ -1512,19 +1512,19 @@ msgstr "%u cliente provee nombre: %s" msgid "PXE BIS not supported" msgstr "no hay soporte para BIS PXE" -#: rfc2131.c:931 rfc3315.c:1176 +#: rfc2131.c:931 rfc3315.c:1181 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "deshabilitando dirección DHCP estática %s para %s" #: rfc2131.c:952 msgid "unknown lease" -msgstr "arriendo desconocido" +msgstr "concesión desconocida" #: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" -msgstr "no usando dirección configurada %s porque está arrendada a %s" +msgstr "no usando dirección configurada %s porque está concedida a %s" #: rfc2131.c:994 #, fuzzy, c-format @@ -1548,9 +1548,9 @@ msgstr "ID de servidor equivocada" msgid "wrong address" msgstr "dirección equivocada" -#: rfc2131.c:1137 rfc3315.c:959 +#: rfc2131.c:1137 rfc3315.c:964 msgid "lease not found" -msgstr "arriendo no encontrado" +msgstr "concesión no encontrada" #: rfc2131.c:1170 msgid "address not available" @@ -1558,7 +1558,7 @@ msgstr "direcci #: rfc2131.c:1181 msgid "static lease available" -msgstr "arriendo estático disponible" +msgstr "concesión estática disponible" #: rfc2131.c:1185 msgid "address reserved" @@ -1567,7 +1567,7 @@ msgstr "direcci #: rfc2131.c:1193 #, c-format msgid "abandoning lease to %s of %s" -msgstr "abandonando arriendo a %s de %s" +msgstr "abandonando concesión a %s de %s" #: rfc2131.c:1701 #, c-format @@ -1587,18 +1587,18 @@ msgstr "%u siguiente servidor: %s" #: rfc2131.c:1721 #, c-format msgid "%u broadcast response" -msgstr "" +msgstr "%u respuesta broadcast" #: rfc2131.c:1784 #, fuzzy, c-format msgid "cannot send DHCP/BOOTP option %d: no space left in packet" -msgstr "no se puede enviar opción DHCP/BOOTP %d: no queda espacio en paquete" +msgstr "no se puede enviar opción DHCP/BOOTP %d: no queda espacio en el paquete" #: rfc2131.c:2025 msgid "PXE menu too large" -msgstr "menú PXE demasiado grande" +msgstr "menú PXE demasiado largo" -#: rfc2131.c:2162 rfc3315.c:1420 +#: rfc2131.c:2162 rfc3315.c:1425 #, fuzzy, c-format msgid "%u requested options: %s" msgstr "%u opciones solicitadas: %s" @@ -1611,7 +1611,7 @@ msgstr "no se puede enviar opci #: netlink.c:78 #, fuzzy, c-format msgid "cannot create netlink socket: %s" -msgstr "no se puede crear socket netlink: %s" +msgstr "no se puede crear zócalo netlink: %s" #: netlink.c:363 #, fuzzy, c-format @@ -1624,7 +1624,7 @@ msgstr "intento de fijar direcci #: dbus.c:523 msgid "setting upstream servers from DBus" -msgstr "fijando servidores upstream desde DBus" +msgstr "fijando servidores subida desde DBus" #: dbus.c:570 msgid "could not register a DBus message handler" @@ -1633,16 +1633,16 @@ msgstr "no se pudo registrar un manejador de mensajes DBus" #: bpf.c:245 #, c-format msgid "cannot create DHCP BPF socket: %s" -msgstr "no se puede crear socket BPF DHCP: %s" +msgstr "no se puede crear zócalo BPF DHCP: %s" #: bpf.c:273 #, fuzzy, c-format msgid "DHCP request for unsupported hardware type (%d) received on %s" msgstr "pedido DHCP por tipo de hardware no-soportado (%d) recibido en %s" -#: helper.c:151 +#: helper.c:153 msgid "lease() function missing in Lua script" -msgstr "" +msgstr "la función lease() no se encuentra en el script Lua" #: tftp.c:303 msgid "unable to get free port for TFTP" @@ -1676,12 +1676,12 @@ msgstr "TFTP envi #: log.c:190 #, c-format msgid "overflow: %d log entries lost" -msgstr "desbordamiento: %d entradas de bitácora perdidas" +msgstr "desbordamiento: %d entradas de registro perdidas" #: log.c:268 #, c-format msgid "log failed: %s" -msgstr "bitácora falló: %s" +msgstr "registro falló: %s" #: log.c:472 msgid "FAILED to start up" @@ -1690,105 +1690,105 @@ msgstr "el inicio ha FALLADO" #: conntrack.c:65 #, c-format msgid "Conntrack connection mark retrieval failed: %s" -msgstr "" +msgstr "Conexión conntrack con marca recuperación falló" #: dhcp6.c:59 #, fuzzy, c-format msgid "cannot create DHCPv6 socket: %s" -msgstr "no se puede crear socket DHCP: %s" +msgstr "no se puede crear zócalo DHCP: %s" #: dhcp6.c:80 #, fuzzy, c-format msgid "failed to set SO_REUSE{ADDR|PORT} on DHCPv6 socket: %s" -msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en socket DHCP: %s" +msgstr "no se pudo fijar SO_REUSE{ADDR|PORT} en zócalo DHCP: %s" #: dhcp6.c:92 #, fuzzy, c-format msgid "failed to bind DHCPv6 server socket: %s" -msgstr "no se pudo acoplar socket de servidor DHCP: %s" +msgstr "no se pudo acoplar zócalo de servidor DHCP: %s" -#: rfc3315.c:149 +#: rfc3315.c:153 #, fuzzy, c-format msgid "no address range available for DHCPv6 request from relay at %s" msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s" -#: rfc3315.c:158 +#: rfc3315.c:162 #, fuzzy, c-format msgid "no address range available for DHCPv6 request via %s" msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s" -#: rfc3315.c:289 +#: rfc3315.c:293 #, fuzzy, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "%u Subred DHCP disponible: %s/%s" -#: rfc3315.c:370 +#: rfc3315.c:375 #, fuzzy, c-format msgid "%u vendor class: %u" msgstr "%u Clase de vendedor: %s" -#: rfc3315.c:418 +#: rfc3315.c:423 #, fuzzy, c-format msgid "%u client MAC address: %s" msgstr "%u cliente provee nombre: %s" -#: rfc3315.c:650 +#: rfc3315.c:655 #, fuzzy, c-format msgid "unknown prefix-class %d" -msgstr "arriendo desconocido" +msgstr "clase de prefijo desconocida" -#: rfc3315.c:781 rfc3315.c:903 +#: rfc3315.c:786 rfc3315.c:908 msgid "success" msgstr "" -#: rfc3315.c:796 rfc3315.c:798 rfc3315.c:911 rfc3315.c:913 +#: rfc3315.c:801 rfc3315.c:803 rfc3315.c:916 rfc3315.c:918 #, fuzzy msgid "no addresses available" msgstr "ninguna dirección disponible" -#: rfc3315.c:855 +#: rfc3315.c:860 #, fuzzy msgid "address unavailable" msgstr "dirección no disponible" -#: rfc3315.c:890 +#: rfc3315.c:895 msgid "not on link" -msgstr "" +msgstr "no en el enlace" -#: rfc3315.c:963 rfc3315.c:1138 rfc3315.c:1215 +#: rfc3315.c:968 rfc3315.c:1143 rfc3315.c:1220 msgid "no binding found" -msgstr "" - -#: rfc3315.c:1001 -msgid "deprecated" -msgstr "" +msgstr "uniones no encontradas" #: rfc3315.c:1006 +msgid "deprecated" +msgstr "descartado" + +#: rfc3315.c:1011 #, fuzzy msgid "address invalid" msgstr "dirección en uso" -#: rfc3315.c:1048 +#: rfc3315.c:1053 msgid "confirm failed" -msgstr "" +msgstr "confirmación falló" -#: rfc3315.c:1059 +#: rfc3315.c:1064 #, fuzzy msgid "all addresses still on link" msgstr "dirección errónea en %s línea %d" -#: rfc3315.c:1147 +#: rfc3315.c:1152 msgid "release received" -msgstr "" +msgstr "concesión recibida" -#: rfc3315.c:2038 +#: rfc3315.c:2043 msgid "Cannot multicast to DHCPv6 server without correct interface" -msgstr "" +msgstr "No puede hacer multicast DHCPv6 sin el interfase correcto" #: dhcp-common.c:145 #, c-format msgid "Ignoring duplicate dhcp-option %d" -msgstr "" +msgstr "Ignorando opción DHCP duplicada" #: dhcp-common.c:222 #, c-format @@ -1822,49 +1822,49 @@ msgstr "Opciones DHCP conocidas:\n" #: dhcp-common.c:814 msgid ", prefix deprecated" -msgstr "" +msgstr ", prefijo descartado" #: dhcp-common.c:817 #, c-format msgid ", lease time " -msgstr "" +msgstr ", tiempo de concesión" -#: dhcp-common.c:849 +#: dhcp-common.c:859 #, c-format msgid "%s stateless on %s%.0s%.0s%s" -msgstr "" +msgstr "%s apátrida en %s%.0s%.0s%s" -#: dhcp-common.c:851 +#: dhcp-common.c:861 #, fuzzy, c-format msgid "%s, static leases only on %.0s%s%s%.0s" -msgstr "DHCP, arriendos estáticos solo en %.0s%s, tiempo de arriendo %s" +msgstr "DHCP, concesión estática solo en %.0s%s, tiempo de concesión %s" -#: dhcp-common.c:853 +#: dhcp-common.c:863 #, fuzzy, c-format msgid "%s, proxy on subnet %.0s%s%.0s%.0s" msgstr "DHCP, proxy en subred %.0s%s%.0s" -#: dhcp-common.c:854 +#: dhcp-common.c:864 #, fuzzy, c-format msgid "%s, IP range %s -- %s%s%.0s" -msgstr "DHCP, rango de IPs %s -- %s, tiempo de arriendo %s" +msgstr "DHCP, rango de IPs %s -- %s, tiempo de concesión %s" -#: dhcp-common.c:861 +#: dhcp-common.c:877 #, c-format msgid "DHCPv4-derived IPv6 names on %s%s" msgstr "" -#: dhcp-common.c:864 +#: dhcp-common.c:880 #, fuzzy, c-format msgid "router advertisement on %s%s" -msgstr "DHCP, arriendos estáticos solo en %.0s%s, tiempo de arriendo %s" +msgstr "DHCP, concesión estáticos solo en %.0s%s, tiempo de concesión %s" -#: dhcp-common.c:875 +#: dhcp-common.c:891 #, c-format msgid "DHCP relay from %s to %s via %s" msgstr "" -#: dhcp-common.c:877 +#: dhcp-common.c:893 #, c-format msgid "DHCP relay from %s to %s" msgstr "" @@ -1890,7 +1890,7 @@ msgid "failed to create IPset control socket: %s" msgstr "no se pudo crear socket TFTP: %s" #~ msgid "no interface with address %s" -#~ msgstr "ninguna interface con dirección %s" +#~ msgstr "ninguna interfase con dirección %s" #~ msgid "duplicate IP address %s in dhcp-config directive." #~ msgstr "dirección IP duplicada %s en directiva dhcp-config." @@ -1923,10 +1923,10 @@ msgstr "no se pudo crear socket TFTP: %s" #~ msgstr "paquete DHCP: transaction-id (identificación de transacción) es %u" #~ msgid "must set exactly one interface on broken systems without IP_RECVIF" -#~ msgstr "debe fijarse exáctamente una interface en sistemas rotos sin IP_RECVIF" +#~ msgstr "debe fijarse exáctamente una interfase en sistemas rotos sin IP_RECVIF" #~ msgid "Ignoring DHCP lease for %s because it has an illegal domain part" -#~ msgstr "Ignorando arriendo DHCP para %s porque tiene una parte ilegal de dominio" +#~ msgstr "Ignorando concesión DHCP para %s porque tiene una parte ilegal de dominio" #~ msgid "ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h" #~ msgstr "integración dhcpd ISC no disponible: fijar HAVE_ISC_READER en src/config.h" @@ -1942,14 +1942,14 @@ msgstr "no se pudo crear socket TFTP: %s" #~ msgstr "corriendo como root" #~ msgid "Read leases at startup, but never write the lease file." -#~ msgstr "Leer arriendos al inicio, pero nunca escribir el archivo de arriendos." +#~ msgstr "Leer concesión al inicio, pero nunca escribir el archivo de concesión." #, fuzzy #~ msgid "read %s - %d hosts" #~ msgstr "direcciónes %s - %d leídas" #~ msgid "Limit of %d leases exceeded." -#~ msgstr "Límite de %d arriendos excedido." +#~ msgstr "Límite de %d concesión excedido." #~ msgid "domains" #~ msgstr "dominios" From ed4c0767b1f3a5182f5322adf33a5a460b500f98 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Tue, 8 Oct 2013 20:46:34 +0100 Subject: [PATCH 40/67] --add-subnet option. --- CHANGELOG | 3 + man/dnsmasq.8 | 15 ++- src/config.h | 1 - src/dns-protocol.h | 4 + src/dnsmasq.h | 8 +- src/forward.c | 61 +++++++++--- src/option.c | 14 +++ src/rfc1035.c | 233 ++++++++++++++++++++++++++++++++------------- 8 files changed, 257 insertions(+), 82 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index d76eb7a..d400d16 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -132,6 +132,9 @@ version 2.67 Update Spanish transalation. Thanks to Vicente Soriano. + Add --add-subnet configuration, to tell upstream DNS + servers where the original client is. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index 2b1570a..a0f903f 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -543,7 +543,20 @@ server. The MAC address can only be added if the requestor is on the same subnet as the dnsmasq server. Note that the mechanism used to achieve this (an EDNS0 option) is not yet standardised, so this should be considered experimental. Also note that exposing MAC addresses in this way may -have security and privacy implications. +have security and privacy implications. The warning about caching +given for --add-subnet applies to --add-mac too. +.TP +.B --add-subnet[[=],] +Add the subnet address of the requestor to the DNS queries which are +forwarded upstream. The amount of the address forwarded depends on the +prefix length parameter: 32 (128 for IPv6) forwards the whole address, +zero forwards none of it but still marks the request so that no +upstream nameserver will add client address information either. The +default is zero for both IPv4 and IPv6. Note that upstream nameservers +may be configured to return different results based on this +information, but the dnsmasq cache does not take account. If a dnsmasq +instance is configured such that different results may be encountered, +caching should be disabled. .TP .B \-c, --cache-size= Set the size of dnsmasq's cache. The default is 150 names. Setting the cache size to zero disables caching. diff --git a/src/config.h b/src/config.h index 5224adf..31ae1cb 100644 --- a/src/config.h +++ b/src/config.h @@ -39,7 +39,6 @@ #define TFTP_MAX_CONNECTIONS 50 /* max simultaneous connections */ #define LOG_MAX 5 /* log-queue length */ #define RANDFILE "/dev/urandom" -#define EDNS0_OPTION_MAC 5 /* dyndns.org temporary assignment */ #define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq" /* Default - may be overridden by config */ #define DNSMASQ_PATH "/uk/org/thekelleys/dnsmasq" #define AUTH_TTL 600 /* default TTL for auth DNS */ diff --git a/src/dns-protocol.h b/src/dns-protocol.h index 80eff72..51ca6b9 100644 --- a/src/dns-protocol.h +++ b/src/dns-protocol.h @@ -56,6 +56,10 @@ #define T_MAILB 253 #define T_ANY 255 +#define EDNS0_OPTION_MAC 65001 /* dyndns.org temporary assignment */ +#define EDNS0_OPTION_CLIENT_SUBNET 5 /* IANA */ + + struct dns_header { u16 id; u8 hb3,hb4; diff --git a/src/dnsmasq.h b/src/dnsmasq.h index b652a91..ed6f92f 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -222,7 +222,8 @@ struct event_desc { #define OPT_CLEVERBIND 39 #define OPT_TFTP 40 #define OPT_FAST_RA 41 -#define OPT_LAST 42 +#define OPT_CLIENT_SUBNET 42 +#define OPT_LAST 43 /* extra flags for my_syslog, we use a couple of facilities since they are known not to occupy the same bits as priorities, no matter how syslog.h is set up. */ @@ -487,6 +488,7 @@ struct hostsfile { #define FREC_NOREBIND 1 #define FREC_CHECKING_DISABLED 2 +#define FREC_HAS_SUBNET 4 struct frec { union mysockaddr source; @@ -802,6 +804,8 @@ extern struct daemon { struct auth_zone *auth_zones; struct interface_name *int_names; char *mxtarget; + int addr4_netmask; + int addr6_netmask; char *lease_file; char *username, *groupname, *scriptuser; char *luascript; @@ -962,6 +966,8 @@ unsigned int questions_crc(struct dns_header *header, size_t plen, char *buff); size_t resize_packet(struct dns_header *header, size_t plen, unsigned char *pheader, size_t hlen); size_t add_mac(struct dns_header *header, size_t plen, char *limit, union mysockaddr *l3); +size_t add_source_addr(struct dns_header *header, size_t plen, char *limit, union mysockaddr *source); +int check_source(struct dns_header *header, size_t plen, unsigned char *pseudoheader, union mysockaddr *peer); int add_resource_record(struct dns_header *header, char *limit, int *truncp, int nameoffset, unsigned char **pp, unsigned long ttl, int *offset, unsigned short type, unsigned short class, char *format, ...); diff --git a/src/forward.c b/src/forward.c index 6c9f646..adc4a0f 100644 --- a/src/forward.c +++ b/src/forward.c @@ -284,6 +284,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr, forward->fd = udpfd; forward->crc = crc; forward->forwardall = 0; + forward->flags = 0; if (norebind) forward->flags |= FREC_NOREBIND; if (header->hb4 & HB4_CD) @@ -331,6 +332,16 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr, if (option_bool(OPT_ADD_MAC)) plen = add_mac(header, plen, ((char *) header) + PACKETSZ, &forward->source); + if (option_bool(OPT_CLIENT_SUBNET)) + { + size_t new = add_source_addr(header, plen, ((char *) header) + PACKETSZ, &forward->source); + if (new != plen) + { + plen = new; + forward->flags |= FREC_HAS_SUBNET; + } + } + while (1) { /* only send to servers dealing with our domain. @@ -435,8 +446,8 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr, return 0; } -static size_t process_reply(struct dns_header *header, time_t now, - struct server *server, size_t n, int check_rebind, int checking_disabled) +static size_t process_reply(struct dns_header *header, time_t now, struct server *server, size_t n, int check_rebind, + int checking_disabled, int check_subnet, union mysockaddr *query_source) { unsigned char *pheader, *sizep; char **sets = 0; @@ -465,19 +476,29 @@ static size_t process_reply(struct dns_header *header, time_t now, than we allow, trim it so that we don't get overlarge requests for the client. We can't do this for signed packets. */ - if ((pheader = find_pseudoheader(header, n, &plen, &sizep, &is_sign)) && !is_sign) + if ((pheader = find_pseudoheader(header, n, &plen, &sizep, &is_sign))) { - unsigned short udpsz; - unsigned char *psave = sizep; + if (!is_sign) + { + unsigned short udpsz; + unsigned char *psave = sizep; + + GETSHORT(udpsz, sizep); + if (udpsz > daemon->edns_pktsz) + PUTSHORT(daemon->edns_pktsz, psave); + } - GETSHORT(udpsz, sizep); - if (udpsz > daemon->edns_pktsz) - PUTSHORT(daemon->edns_pktsz, psave); + if (check_subnet && !check_source(header, plen, pheader, query_source)) + { + my_syslog(LOG_WARNING, _("discarding DNS reply: subnet option mismatch")); + return 0; + } } + /* RFC 4035 sect 4.6 para 3 */ if (!is_sign && !option_bool(OPT_DNSSEC)) - header->hb4 &= ~HB4_AD; + header->hb4 &= ~HB4_AD; if (OPCODE(header) != QUERY || (RCODE(header) != NOERROR && RCODE(header) != NXDOMAIN)) return n; @@ -632,7 +653,8 @@ void reply_query(int fd, int family, time_t now) if (!option_bool(OPT_NO_REBIND)) check_rebind = 0; - if ((nn = process_reply(header, now, server, (size_t)n, check_rebind, forward->flags & FREC_CHECKING_DISABLED))) + if ((nn = process_reply(header, now, server, (size_t)n, check_rebind, forward->flags & FREC_CHECKING_DISABLED, + forward->flags & FREC_HAS_SUBNET, &forward->source))) { header->id = htons(forward->orig_id); header->hb4 |= HB4_RA; /* recursion if available */ @@ -876,7 +898,7 @@ unsigned char *tcp_request(int confd, time_t now, { size_t size = 0; int norebind = 0; - int checking_disabled; + int checking_disabled, check_subnet; size_t m; unsigned short qtype; unsigned int gotname; @@ -906,6 +928,8 @@ unsigned char *tcp_request(int confd, time_t now, if (size < (int)sizeof(struct dns_header)) continue; + check_subnet = 0; + /* save state of "cd" flag in query */ checking_disabled = header->hb4 & HB4_CD; @@ -955,7 +979,17 @@ unsigned char *tcp_request(int confd, time_t now, if (option_bool(OPT_ADD_MAC)) size = add_mac(header, size, ((char *) header) + 65536, &peer_addr); - + + if (option_bool(OPT_CLIENT_SUBNET)) + { + size_t new = add_source_addr(header, size, ((char *) header) + 65536, &peer_addr); + if (size != new) + { + size = new; + check_subnet = 1; + } + } + if (gotname) flags = search_servers(now, &addrp, gotname, daemon->namebuff, &type, &domain, &norebind); @@ -1056,7 +1090,8 @@ unsigned char *tcp_request(int confd, time_t now, sending replies containing questions and bogus answers. */ if (crc == questions_crc(header, (unsigned int)m, daemon->namebuff)) m = process_reply(header, now, last_server, (unsigned int)m, - option_bool(OPT_NO_REBIND) && !norebind, checking_disabled); + option_bool(OPT_NO_REBIND) && !norebind, checking_disabled, + check_subnet, &peer_addr); break; } diff --git a/src/option.c b/src/option.c index 9b128cf..b8edf42 100644 --- a/src/option.c +++ b/src/option.c @@ -134,6 +134,7 @@ struct myoption { #endif #define LOPT_FAST_RA 322 #define LOPT_RELAY 323 +#define LOPT_ADD_SBNET 324 #ifdef HAVE_GETOPT_LONG static const struct option opts[] = @@ -251,6 +252,7 @@ static const struct myoption opts[] = { "dhcp-generate-names", 2, 0, LOPT_GEN_NAMES }, { "rebind-localhost-ok", 0, 0, LOPT_LOC_REBND }, { "add-mac", 0, 0, LOPT_ADD_MAC }, + { "add-subnet", 2, 0, LOPT_ADD_SBNET }, { "proxy-dnssec", 0, 0, LOPT_DNSSEC }, { "dhcp-sequential-ip", 0, 0, LOPT_INCR_ADDR }, { "conntrack", 0, 0, LOPT_CONNTRACK }, @@ -397,6 +399,7 @@ static struct { { LOPT_PXE_SERV, ARG_DUP, "", gettext_noop("Boot service for PXE menu."), NULL }, { LOPT_TEST, 0, NULL, gettext_noop("Check configuration syntax."), NULL }, { LOPT_ADD_MAC, OPT_ADD_MAC, NULL, gettext_noop("Add requestor's MAC address to forwarded DNS queries."), NULL }, + { LOPT_ADD_SBNET, ARG_ONE, "[,]", gettext_noop("Add requestor's IP subnet to forwarded DNS queries."), NULL }, { LOPT_DNSSEC, OPT_DNSSEC, NULL, gettext_noop("Proxy DNSSEC validation results from upstream nameservers."), NULL }, { LOPT_INCR_ADDR, OPT_CONSEC_ADDR, NULL, gettext_noop("Attempt to allocate sequential IP addresses to DHCP clients."), NULL }, { LOPT_CONNTRACK, OPT_CONNTRACK, NULL, gettext_noop("Copy connection-track mark from queries to upstream connections."), NULL }, @@ -1424,6 +1427,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma break; } + case LOPT_ADD_SBNET: /* --add-subnet */ + set_option_bool(OPT_CLIENT_SUBNET); + if (arg) + { + comma = split(arg); + if (!atoi_check(arg, &daemon->addr4_netmask) || + (comma && !atoi_check(comma, &daemon->addr6_netmask))) + ret_err(gen_err); + } + break; + case '1': /* --enable-dbus */ set_option_bool(OPT_DBUS); if (arg) diff --git a/src/rfc1035.c b/src/rfc1035.c index 60ed068..5e7fe95 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -513,15 +513,81 @@ struct macparm { size_t plen; union mysockaddr *l3; }; + +static size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit, + int optno, unsigned char *opt, size_t optlen) +{ + unsigned char *lenp, *datap, *p; + int rdlen; + + if (ntohs(header->arcount) == 0) + { + /* We are adding the pseudoheader */ + if (!(p = skip_questions(header, plen)) || + !(p = skip_section(p, + ntohs(header->ancount) + ntohs(header->nscount), + header, plen))) + return plen; + *p++ = 0; /* empty name */ + PUTSHORT(T_OPT, p); + PUTSHORT(daemon->edns_pktsz, p); /* max packet length */ + PUTLONG(0, p); /* extended RCODE */ + lenp = p; + PUTSHORT(0, p); /* RDLEN */ + rdlen = 0; + if (((ssize_t)optlen) > (limit - (p + 4))) + return plen; /* Too big */ + header->arcount = htons(1); + datap = p; + } + else + { + int i, is_sign; + unsigned short code, len; + + if (ntohs(header->arcount) != 1 || + !(p = find_pseudoheader(header, plen, NULL, NULL, &is_sign)) || + is_sign || + (!(p = skip_name(p, header, plen, 10)))) + return plen; + + p += 8; /* skip UDP length and RCODE */ + + lenp = p; + GETSHORT(rdlen, p); + if (!CHECK_LEN(header, p, plen, rdlen)) + return plen; /* bad packet */ + datap = p; + + /* check if option already there */ + for (i = 0; i + 4 < rdlen; i += len + 4) + { + GETSHORT(code, p); + GETSHORT(len, p); + if (code == optno) + return plen; + p += len; + } + + if (((ssize_t)optlen) > (limit - (p + 4))) + return plen; /* Too big */ + } + + PUTSHORT(optno, p); + PUTSHORT(optlen, p); + memcpy(p, opt, optlen); + p += optlen; + + PUTSHORT(p - datap, lenp); + return p - (unsigned char *)header; + +} static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *parmv) { struct macparm *parm = parmv; int match = 0; - unsigned short rdlen; - struct dns_header *header = parm->header; - unsigned char *lenp, *datap, *p; - + if (family == parm->l3->sa.sa_family) { if (family == AF_INET && memcmp (&parm->l3->in.sin_addr, addrp, INADDRSZ) == 0) @@ -535,72 +601,12 @@ static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *p if (!match) return 1; /* continue */ - - if (ntohs(header->arcount) == 0) - { - /* We are adding the pseudoheader */ - if (!(p = skip_questions(header, parm->plen)) || - !(p = skip_section(p, - ntohs(header->ancount) + ntohs(header->nscount), - header, parm->plen))) - return 0; - *p++ = 0; /* empty name */ - PUTSHORT(T_OPT, p); - PUTSHORT(PACKETSZ, p); /* max packet length - is 512 suitable default for non-EDNS0 resolvers? */ - PUTLONG(0, p); /* extended RCODE */ - lenp = p; - PUTSHORT(0, p); /* RDLEN */ - rdlen = 0; - if (((ssize_t)maclen) > (parm->limit - (p + 4))) - return 0; /* Too big */ - header->arcount = htons(1); - datap = p; - } - else - { - int i, is_sign; - unsigned short code, len; - - if (ntohs(header->arcount) != 1 || - !(p = find_pseudoheader(header, parm->plen, NULL, NULL, &is_sign)) || - is_sign || - (!(p = skip_name(p, header, parm->plen, 10)))) - return 0; - - p += 8; /* skip UDP length and RCODE */ - - lenp = p; - GETSHORT(rdlen, p); - if (!CHECK_LEN(header, p, parm->plen, rdlen)) - return 0; /* bad packet */ - datap = p; - /* check if option already there */ - for (i = 0; i + 4 < rdlen; i += len + 4) - { - GETSHORT(code, p); - GETSHORT(len, p); - if (code == EDNS0_OPTION_MAC) - return 0; - p += len; - } - - if (((ssize_t)maclen) > (parm->limit - (p + 4))) - return 0; /* Too big */ - } - - PUTSHORT(EDNS0_OPTION_MAC, p); - PUTSHORT(maclen, p); - memcpy(p, mac, maclen); - p += maclen; - - PUTSHORT(p - datap, lenp); - parm->plen = p - (unsigned char *)header; + parm->plen = add_pseudoheader(parm->header, parm->plen, parm->limit, EDNS0_OPTION_MAC, (unsigned char *)mac, maclen); return 0; /* done */ } - size_t add_mac(struct dns_header *header, size_t plen, char *limit, union mysockaddr *l3) { struct macparm parm; @@ -621,7 +627,102 @@ size_t add_mac(struct dns_header *header, size_t plen, char *limit, union mysock return parm.plen; } - +struct subnet_opt { + u16 family; + u8 source_netmask, scope_netmask; +#ifdef HAVE_IPV6 + u8 addr[IN6ADDRSZ]; +#else + u8 addr[INADDRSZ]; +#endif +}; + +size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source) +{ + /* http://tools.ietf.org/html/draft-vandergaast-edns-client-subnet-02 */ + + int len; + void *addrp; + + if (source->sa.sa_family == AF_INET) + { + opt->family = htons(1); + opt->source_netmask = daemon->addr4_netmask; + addrp = &source->in.sin_addr; + } +#ifdef HAVE_IPV6 + else + { + opt->family = htons(2); + opt->source_netmask = daemon->addr6_netmask; + addrp = &source->in6.sin6_addr; + } +#endif + + opt->scope_netmask = 0; + len = 0; + + if (opt->source_netmask != 0) + { + len = ((opt->source_netmask - 1) >> 3) + 1; + memcpy(opt->addr, addrp, len); + if (opt->source_netmask & 7) + opt->addr[len-1] &= 0xff << (8 - (opt->source_netmask & 7)); + } + + return len + 4; +} + +size_t add_source_addr(struct dns_header *header, size_t plen, char *limit, union mysockaddr *source) +{ + /* http://tools.ietf.org/html/draft-vandergaast-edns-client-subnet-02 */ + + int len; + struct subnet_opt opt; + + len = calc_subnet_opt(&opt, source); + return add_pseudoheader(header, plen, (unsigned char *)limit, EDNS0_OPTION_CLIENT_SUBNET, (unsigned char *)&opt, len); +} + +int check_source(struct dns_header *header, size_t plen, unsigned char *pseudoheader, union mysockaddr *peer) +{ + /* Section 9.2, Check that subnet option in reply matches. */ + + + int len, calc_len; + struct subnet_opt opt; + unsigned char *p; + int code, i, rdlen; + + calc_len = calc_subnet_opt(&opt, peer); + + if (!(p = skip_name(pseudoheader, header, plen, 10))) + return 1; + + p += 8; /* skip UDP length and RCODE */ + + GETSHORT(rdlen, p); + if (!CHECK_LEN(header, p, plen, rdlen)) + return 1; /* bad packet */ + + /* check if option there */ + for (i = 0; i + 4 < rdlen; i += len + 4) + { + GETSHORT(code, p); + GETSHORT(len, p); + if (code == EDNS0_OPTION_CLIENT_SUBNET) + { + /* make sure this doesn't mismatch. */ + opt.scope_netmask = p[3]; + if (len != calc_len || memcmp(p, &opt, len) != 0) + return 0; + } + p += len; + } + + return 1; +} + /* is addr in the non-globally-routed IP space? */ static int private_net(struct in_addr addr, int ban_localhost) { From c4cd95df68b573b63d234ecdb675228657d65353 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 10 Oct 2013 20:58:11 +0100 Subject: [PATCH 41/67] Add --ra-param and remove --force-fast-ra --- CHANGELOG | 5 ++- man/dnsmasq.8 | 18 +++++--- src/dnsmasq.h | 10 ++++- src/option.c | 31 +++++++++++-- src/radv.c | 120 +++++++++++++++++++++++++++++++++++++++----------- 5 files changed, 147 insertions(+), 37 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index d76eb7a..9392514 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -90,8 +90,6 @@ version 2.67 smallest valid dhcp-range is sent. Thanks to Uwe Schindler for suggesting this. - Add --force-fast-ra option. Another thanks to Uwe Schindler. - Make --listen-address higher priority than --except-interface in all circumstances. Thanks to Thomas Hood for the bugreport. @@ -132,6 +130,9 @@ version 2.67 Update Spanish transalation. Thanks to Vicente Soriano. + Add --ra-param option. Thanks to Vladislav Grishenko for + inspiration on this. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index 2b1570a..2652f4b 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -1525,11 +1525,19 @@ the relevant link-local address of the machine running dnsmasq is sent as recursive DNS server. If provided, the DHCPv6 options dns-server and domain-search are used for RDNSS and DNSSL. .TP -.B --force-fast-ra -Normally, dnsmasq advertises a new IPv6 prefix frequently (every 10 seconds or so) for the first minute, and then -drops back to sending "maintenance" advertisements every 10 minutes or so. This option forces dnsmasq to be always in -frequent RA mode. It's a bug workaround for mobile devices which go deaf to RAs during sleep and therefore -lose conectivity; with frequent RAs they recover in a reasonable time after wakeup. +.B --ra-param=,[high|low],[[],] +Set non-default values for router advertisements sent via an +interface. The priority field for the router may be altered from the +default of medium with eg +.B --ra-param=eth0,high. +The interval between router advertisements may be set (in seconds) with +.B --ra-param=eth0,60. +The lifetime of the route may be changed or set to zero, which allows +a router to advertise prefixes but not a route via itself. +.B --ra-parm=eth0,0,0 +(A value of zero for the interval means the default value.) All three parameters may be set at once. +.B --ra-param=low,60,1200 +The interface field may include a wildcard. .TP .B --enable-tftp[=[,]] Enable the TFTP server function. This is deliberately limited to that diff --git a/src/dnsmasq.h b/src/dnsmasq.h index b652a91..d67ba59 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -221,8 +221,7 @@ struct event_desc { #define OPT_TFTP_LC 38 #define OPT_CLEVERBIND 39 #define OPT_TFTP 40 -#define OPT_FAST_RA 41 -#define OPT_LAST 42 +#define OPT_LAST 41 /* extra flags for my_syslog, we use a couple of facilities since they are known not to occupy the same bits as priorities, no matter how syslog.h is set up. */ @@ -701,6 +700,12 @@ struct prefix_class { }; #endif +struct ra_interface { + char *name; + int interval, lifetime, prio; + struct ra_interface *next; +}; + struct dhcp_context { unsigned int lease_time, addr_epoch; struct in_addr netmask, broadcast; @@ -825,6 +830,7 @@ extern struct daemon { unsigned long local_ttl, neg_ttl, max_ttl, max_cache_ttl, auth_ttl; struct hostsfile *addn_hosts; struct dhcp_context *dhcp, *dhcp6; + struct ra_interface *ra_interfaces; struct dhcp_config *dhcp_conf; struct dhcp_opt *dhcp_opts, *dhcp_match, *dhcp_opts6, *dhcp_match6; struct dhcp_vendor *dhcp_vendors; diff --git a/src/option.c b/src/option.c index 9b128cf..997703b 100644 --- a/src/option.c +++ b/src/option.c @@ -132,8 +132,8 @@ struct myoption { #ifdef OPTION6_PREFIX_CLASS #define LOPT_PREF_CLSS 321 #endif -#define LOPT_FAST_RA 322 #define LOPT_RELAY 323 +#define LOPT_RA_PARAM 324 #ifdef HAVE_GETOPT_LONG static const struct option opts[] = @@ -271,8 +271,8 @@ static const struct myoption opts[] = #ifdef OPTION6_PREFIX_CLASS { "dhcp-prefix-class", 1, 0, LOPT_PREF_CLSS }, #endif - { "force-fast-ra", 0, 0, LOPT_FAST_RA }, { "dhcp-relay", 1, 0, LOPT_RELAY }, + { "ra-param", 1, 0, LOPT_RA_PARAM }, { NULL, 0, 0, 0 } }; @@ -402,7 +402,6 @@ static struct { { LOPT_CONNTRACK, OPT_CONNTRACK, NULL, gettext_noop("Copy connection-track mark from queries to upstream connections."), NULL }, { LOPT_FQDN, OPT_FQDN_UPDATE, NULL, gettext_noop("Allow DHCP clients to do their own DDNS updates."), NULL }, { LOPT_RA, OPT_RA, NULL, gettext_noop("Send router-advertisements for interfaces doing DHCPv6"), NULL }, - { LOPT_FAST_RA, OPT_FAST_RA, NULL, gettext_noop("Always send frequent router-advertisements"), NULL }, { LOPT_DUID, ARG_ONE, ",", gettext_noop("Specify DUID_EN-type DHCPv6 server DUID"), NULL }, { LOPT_HOST_REC, ARG_DUP, ",
", gettext_noop("Specify host (A/AAAA and PTR) records"), NULL }, { LOPT_RR, ARG_DUP, ",,[]", gettext_noop("Specify arbitrary DNS resource record"), NULL }, @@ -418,6 +417,7 @@ static struct { #ifdef OPTION6_PREFIX_CLASS { LOPT_PREF_CLSS, ARG_DUP, "set:tag,", gettext_noop("Specify DHCPv6 prefix class"), NULL }, #endif + { LOPT_RA_PARAM, ARG_DUP, ",[high,|low,][,]", gettext_noop("Set priority, resend-interval and router-lifetime"), NULL }, { 0, 0, NULL, NULL, NULL } }; @@ -3215,6 +3215,31 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma #endif #ifdef HAVE_DHCP6 + case LOPT_RA_PARAM: /* --ra-param */ + if ((comma = split(arg))) + { + struct ra_interface *new = opt_malloc(sizeof(struct ra_interface)); + new->lifetime = -1; + new->prio = 0; + new->name = opt_string_alloc(arg); + if (strcasestr(comma, "high") == comma || strcasestr(comma, "low") == comma) + { + if (*comma == 'l' || *comma == 'L') + new->prio = 0x18; + else + new->prio = 0x08; + comma = split(comma); + } + arg = split(comma); + if (!atoi_check(comma, &new->interval) || + (arg && !atoi_check(arg, &new->lifetime))) + ret_err(_("bad RA-params")); + + new->next = daemon->ra_interfaces; + daemon->ra_interfaces = new; + } + break; + case LOPT_DUID: /* --dhcp-duid */ if (!(comma = split(arg)) || !atoi_check(arg, (int *)&daemon->duid_enterprise)) ret_err(_("bad DUID")); diff --git a/src/radv.c b/src/radv.c index b1f2bc1..d1147ba 100644 --- a/src/radv.c +++ b/src/radv.c @@ -32,11 +32,12 @@ struct ra_param { char *if_name; struct dhcp_netid *tags; struct in6_addr link_local, link_global; - unsigned int pref_time; + unsigned int pref_time, adv_interval; }; struct search_param { time_t now; int iface; + char name[IF_NAMESIZE+1]; }; static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *dest); @@ -47,7 +48,11 @@ static int iface_search(struct in6_addr *local, int prefix, int scope, int if_index, int flags, int prefered, int valid, void *vparam); static int add_lla(int index, unsigned int type, char *mac, size_t maclen, void *parm); -static void new_timeout(struct dhcp_context *context, time_t now); +static void new_timeout(struct dhcp_context *context, char *iface_name, time_t now); +static unsigned int calc_lifetime(struct ra_interface *ra); +static unsigned int calc_interval(struct ra_interface *ra); +static unsigned int calc_prio(struct ra_interface *ra); +static struct ra_interface *find_iface_param(char *iface); static int hop_limit; @@ -198,19 +203,20 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de struct dhcp_context *context, *tmp, **up; struct dhcp_netid iface_id; struct dhcp_opt *opt_cfg; + struct ra_interface *ra_param = find_iface_param(iface_name); int done_dns = 0; #ifdef HAVE_LINUX_NETWORK FILE *f; #endif - + save_counter(0); ra = expand(sizeof(struct ra_packet)); ra->type = ND_ROUTER_ADVERT; ra->code = 0; ra->hop_limit = hop_limit; - ra->flags = 0x00; - ra->lifetime = htons(RA_INTERVAL * 3); /* AdvDefaultLifetime * 3 */ + ra->flags = calc_prio(ra_param); + ra->lifetime = htons(calc_lifetime(ra_param)); ra->reachable_time = 0; ra->retrans_time = 0; @@ -222,6 +228,7 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de parm.first = 1; parm.now = now; parm.pref_time = 0; + parm.adv_interval = calc_interval(ra_param); /* set tag with name == interface */ iface_id.net = iface_name; @@ -335,7 +342,7 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de put_opt6_char(ICMP6_OPT_RDNSS); put_opt6_char((opt_cfg->len/8) + 1); put_opt6_short(0); - put_opt6_long(RA_INTERVAL * 2); /* lifetime - twice RA retransmit */ + put_opt6_long(parm.adv_interval * 2); /* lifetime - twice RA retransmit */ /* zero means "self" */ for (i = 0; i < opt_cfg->len; i += IN6ADDRSZ, a++) if (IN6_IS_ADDR_UNSPECIFIED(a)) @@ -351,7 +358,7 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de put_opt6_char(ICMP6_OPT_DNSSL); put_opt6_char(len + 1); put_opt6_short(0); - put_opt6_long(RA_INTERVAL * 2); /* lifetime - twice RA retransmit */ + put_opt6_long(parm.adv_interval * 2); /* lifetime - twice RA retransmit */ put_opt6(opt_cfg->val, opt_cfg->len); /* pad */ @@ -366,7 +373,7 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de put_opt6_char(ICMP6_OPT_RDNSS); put_opt6_char(3); put_opt6_short(0); - put_opt6_long(RA_INTERVAL * 2); /* lifetime - twice RA retransmit */ + put_opt6_long(parm.adv_interval * 2); /* lifetime - twice RA retransmit */ put_opt6(&parm.link_global, IN6ADDRSZ); } @@ -455,8 +462,8 @@ static int add_prefixes(struct in6_addr *local, int prefix, if (time > context->lease_time) { time = context->lease_time; - if (time < ((unsigned int)(3 * RA_INTERVAL))) - time = 3 * RA_INTERVAL; + if (time < ((unsigned int)(3 * param->adv_interval))) + time = 3 * param->adv_interval; } if (context->flags & CONTEXT_DEPRECATE) @@ -564,8 +571,7 @@ time_t periodic_ra(time_t now) struct search_param param; struct dhcp_context *context; time_t next_event; - char interface[IF_NAMESIZE+1]; - + param.now = now; param.iface = 0; @@ -586,13 +592,15 @@ time_t periodic_ra(time_t now) if (!context) break; - if ((context->flags & CONTEXT_OLD) && context->if_index != 0) + if ((context->flags & CONTEXT_OLD) && + context->if_index != 0 && + indextoname(daemon->icmp6fd, param.iface, param.name)) { /* A context for an old address. We'll not find the interface by - looking for addresses, but we know it anyway, as long as we - sent at least one RA whilst the address was current. */ + looking for addresses, but we know it anyway, since the context is + constructed */ param.iface = context->if_index; - new_timeout(context, now); + new_timeout(context, param.name, now); } else if (iface_enumerate(AF_INET6, ¶m, iface_search)) /* There's a context overdue, but we can't find an interface @@ -603,15 +611,14 @@ time_t periodic_ra(time_t now) context->ra_time = 0; if (param.iface != 0 && - indextoname(daemon->icmp6fd, param.iface, interface) && - iface_check(AF_LOCAL, NULL, interface, NULL)) + iface_check(AF_LOCAL, NULL, param.name, NULL)) { struct iname *tmp; for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next) - if (tmp->name && wildcard_match(tmp->name, interface)) + if (tmp->name && wildcard_match(tmp->name, param.name)) break; if (!tmp) - send_ra(now, param.iface, interface, NULL); + send_ra(now, param.iface, param.name, NULL); } } return next_event; @@ -643,7 +650,14 @@ static int iface_search(struct in6_addr *local, int prefix, if (!(flags & IFACE_TENTATIVE)) param->iface = if_index; - new_timeout(context, param->now); + /* should never fail */ + if (!indextoname(daemon->icmp6fd, if_index, param->name)) + { + param->iface = 0; + return 0; + } + + new_timeout(context, param->name, param->now); /* zero timers for other contexts on the same subnet, so they don't timeout independently */ @@ -659,14 +673,70 @@ static int iface_search(struct in6_addr *local, int prefix, return 1; /* keep searching */ } -static void new_timeout(struct dhcp_context *context, time_t now) +static void new_timeout(struct dhcp_context *context, char *iface_name, time_t now) { - if (difftime(now, context->ra_short_period_start) < 60.0 || option_bool(OPT_FAST_RA)) + if (difftime(now, context->ra_short_period_start) < 60.0) /* range 5 - 20 */ context->ra_time = now + 5 + (rand16()/4400); else - /* range 3/4 - 1 times RA_INTERVAL */ - context->ra_time = now + (3 * RA_INTERVAL)/4 + ((RA_INTERVAL * (unsigned int)rand16()) >> 18); + { + /* range 3/4 - 1 times MaxRtrAdvInterval */ + unsigned int adv_interval = calc_interval(find_iface_param(iface_name)); + context->ra_time = now + (3 * adv_interval)/4 + ((adv_interval * (unsigned int)rand16()) >> 18); + } +} + +static struct ra_interface *find_iface_param(char *iface) +{ + struct ra_interface *ra; + + for (ra = daemon->ra_interfaces; ra; ra = ra->next) + if (wildcard_match(ra->name, iface)) + return ra; + + return NULL; +} + +static unsigned int calc_interval(struct ra_interface *ra) +{ + int interval = 600; + + if (ra && ra->interval != 0) + { + interval = ra->interval; + if (interval > 1800) + interval = 1800; + else if (interval < 4) + interval = 4; + } + + return (unsigned int)interval; +} + +static unsigned int calc_lifetime(struct ra_interface *ra) +{ + int lifetime, interval = (int)calc_interval(ra); + + if (!ra || ra->lifetime == -1) /* not specified */ + lifetime = 3 * interval; + else + { + lifetime = ra->lifetime; + if (lifetime < interval && lifetime != 0) + lifetime = interval; + else if (lifetime > 9000) + lifetime = 9000; + } + + return (unsigned int)lifetime; +} + +static unsigned int calc_prio(struct ra_interface *ra) +{ + if (ra) + return ra->prio; + + return 0; } #endif From c3edf383ffd44fa09885dcc6ddfa80602a0c52bf Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 10 Oct 2013 21:09:15 +0100 Subject: [PATCH 42/67] Correct client subnet EDNS0 option number. --- src/dns-protocol.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dns-protocol.h b/src/dns-protocol.h index 51ca6b9..2f144a8 100644 --- a/src/dns-protocol.h +++ b/src/dns-protocol.h @@ -57,7 +57,7 @@ #define T_ANY 255 #define EDNS0_OPTION_MAC 65001 /* dyndns.org temporary assignment */ -#define EDNS0_OPTION_CLIENT_SUBNET 5 /* IANA */ +#define EDNS0_OPTION_CLIENT_SUBNET 8 /* IANA */ struct dns_header { From 8584c502d37627d8abe18213771b5f4f98cb4aa3 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Thu, 10 Oct 2013 21:15:23 +0100 Subject: [PATCH 43/67] Don't do bindtodevice if --interface option not given. --- src/dhcp-common.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/dhcp-common.c b/src/dhcp-common.c index ecdb448..304c47e 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -453,14 +453,17 @@ void bindtodevice(int fd) individual processes don't always see the packets they should. SO_BINDTODEVICE is only available Linux. - Note that if wildcards are used in --interface, or a configured interface doesn't - yet exist, then more interfaces may arrive later, so we can't safely assert there - is only one interface and proceed. + Note that if wildcards are used in --interface, or --interface is not used at all, + or a configured interface doesn't yet exist, then more interfaces may arrive later, + so we can't safely assert there is only one interface and proceed. */ struct irec *iface, *found; struct iname *if_tmp; + if (!daemon->if_names) + return; + for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next) if (if_tmp->name && (!if_tmp->used || strchr(if_tmp->name, '*'))) return; From f65b0e546b96d0499448b04500ef63f664450fe4 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 11 Oct 2013 10:19:01 +0100 Subject: [PATCH 44/67] Add sponsorship details. --- CHANGELOG | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index d400d16..5504d16 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -133,7 +133,8 @@ version 2.67 Update Spanish transalation. Thanks to Vicente Soriano. Add --add-subnet configuration, to tell upstream DNS - servers where the original client is. + servers where the original client is. Thanks to DNSthingy + for sponsoring this feature. version 2.66 From 8c0b73d3a8d9f1a7b2e7930b41a3bf3f54b5d62a Mon Sep 17 00:00:00 2001 From: Kevin Darbyshire-Bryant Date: Fri, 11 Oct 2013 11:56:33 +0100 Subject: [PATCH 45/67] Add --quiet-* options. --- CHANGELOG | 3 ++ man/dnsmasq.8 | 5 ++ src/dnsmasq.h | 5 +- src/option.c | 147 ++++++++++++++++++++++++++------------------------ src/radv.c | 9 ++-- src/rfc2131.c | 41 +++++++------- src/rfc3315.c | 32 +++++++---- src/slaac.c | 3 +- 8 files changed, 142 insertions(+), 103 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index cec8f67..b04fbd7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -137,6 +137,9 @@ version 2.67 servers where the original client is. Thanks to DNSthingy for sponsoring this feature. + Add --quiet-dhcp, --quiet-dhcp6 and --quiet-ra. Thanks to + Kevin Darbyshire-Bryant for the initial patch. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index a432be5..6bcd2f9 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -1260,6 +1260,11 @@ tried. This flag disables this check. Use with caution. Extra logging for DHCP: log all the options sent to DHCP clients and the tags used to determine them. .TP +.B --quiet-dhcp, --quiet-dhcp6, --quiet-ra +Suppress logging of the routine operation of these protocols. Errors and +problems will still be logged. --quiet-dhcp and quiet-dhcp6 are +over-ridden by --log-dhcp. +.TP .B \-l, --dhcp-leasefile= Use the specified file to store DHCP lease information. .TP diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 895d78f..24676ed 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -222,7 +222,10 @@ struct event_desc { #define OPT_CLEVERBIND 39 #define OPT_TFTP 40 #define OPT_CLIENT_SUBNET 41 -#define OPT_LAST 42 +#define OPT_QUIET_DHCP 42 +#define OPT_QUIET_DHCP6 43 +#define OPT_QUIET_RA 44 +#define OPT_LAST 45 /* extra flags for my_syslog, we use a couple of facilities since they are known not to occupy the same bits as priorities, no matter how syslog.h is set up. */ diff --git a/src/option.c b/src/option.c index b2cc27d..329ad5a 100644 --- a/src/option.c +++ b/src/option.c @@ -64,77 +64,80 @@ struct myoption { #define OPTSTRING "951yZDNLERKzowefnbvhdkqr:m:p:c:l:s:i:t:u:g:a:x:S:C:A:T:H:Q:I:B:F:G:O:M:X:V:U:j:P:J:W:Y:2:4:6:7:8:0:3:" /* options which don't have a one-char version */ -#define LOPT_RELOAD 256 -#define LOPT_NO_NAMES 257 -#define LOPT_TFTP 258 -#define LOPT_SECURE 259 -#define LOPT_PREFIX 260 -#define LOPT_PTR 261 -#define LOPT_BRIDGE 262 -#define LOPT_TFTP_MAX 263 -#define LOPT_FORCE 264 -#define LOPT_NOBLOCK 265 -#define LOPT_LOG_OPTS 266 -#define LOPT_MAX_LOGS 267 -#define LOPT_CIRCUIT 268 -#define LOPT_REMOTE 269 -#define LOPT_SUBSCR 270 -#define LOPT_INTNAME 271 -#define LOPT_BANK 272 -#define LOPT_DHCP_HOST 273 -#define LOPT_APREF 274 -#define LOPT_OVERRIDE 275 -#define LOPT_TFTPPORTS 276 -#define LOPT_REBIND 277 -#define LOPT_NOLAST 278 -#define LOPT_OPTS 279 -#define LOPT_DHCP_OPTS 280 -#define LOPT_MATCH 281 -#define LOPT_BROADCAST 282 -#define LOPT_NEGTTL 283 -#define LOPT_ALTPORT 284 -#define LOPT_SCRIPTUSR 285 -#define LOPT_LOCAL 286 -#define LOPT_NAPTR 287 -#define LOPT_MINPORT 288 -#define LOPT_DHCP_FQDN 289 -#define LOPT_CNAME 290 -#define LOPT_PXE_PROMT 291 -#define LOPT_PXE_SERV 292 -#define LOPT_TEST 293 -#define LOPT_TAG_IF 294 -#define LOPT_PROXY 295 -#define LOPT_GEN_NAMES 296 -#define LOPT_MAXTTL 297 -#define LOPT_NO_REBIND 298 -#define LOPT_LOC_REBND 299 -#define LOPT_ADD_MAC 300 -#define LOPT_DNSSEC 301 -#define LOPT_INCR_ADDR 302 -#define LOPT_CONNTRACK 303 -#define LOPT_FQDN 304 -#define LOPT_LUASCRIPT 305 -#define LOPT_RA 306 -#define LOPT_DUID 307 -#define LOPT_HOST_REC 308 -#define LOPT_TFTP_LC 309 -#define LOPT_RR 310 -#define LOPT_CLVERBIND 311 -#define LOPT_MAXCTTL 312 -#define LOPT_AUTHZONE 313 -#define LOPT_AUTHSERV 314 -#define LOPT_AUTHTTL 315 -#define LOPT_AUTHSOA 316 -#define LOPT_AUTHSFS 317 -#define LOPT_AUTHPEER 318 -#define LOPT_IPSET 319 -#define LOPT_SYNTH 320 +#define LOPT_RELOAD 256 +#define LOPT_NO_NAMES 257 +#define LOPT_TFTP 258 +#define LOPT_SECURE 259 +#define LOPT_PREFIX 260 +#define LOPT_PTR 261 +#define LOPT_BRIDGE 262 +#define LOPT_TFTP_MAX 263 +#define LOPT_FORCE 264 +#define LOPT_NOBLOCK 265 +#define LOPT_LOG_OPTS 266 +#define LOPT_MAX_LOGS 267 +#define LOPT_CIRCUIT 268 +#define LOPT_REMOTE 269 +#define LOPT_SUBSCR 270 +#define LOPT_INTNAME 271 +#define LOPT_BANK 272 +#define LOPT_DHCP_HOST 273 +#define LOPT_APREF 274 +#define LOPT_OVERRIDE 275 +#define LOPT_TFTPPORTS 276 +#define LOPT_REBIND 277 +#define LOPT_NOLAST 278 +#define LOPT_OPTS 279 +#define LOPT_DHCP_OPTS 280 +#define LOPT_MATCH 281 +#define LOPT_BROADCAST 282 +#define LOPT_NEGTTL 283 +#define LOPT_ALTPORT 284 +#define LOPT_SCRIPTUSR 285 +#define LOPT_LOCAL 286 +#define LOPT_NAPTR 287 +#define LOPT_MINPORT 288 +#define LOPT_DHCP_FQDN 289 +#define LOPT_CNAME 290 +#define LOPT_PXE_PROMT 291 +#define LOPT_PXE_SERV 292 +#define LOPT_TEST 293 +#define LOPT_TAG_IF 294 +#define LOPT_PROXY 295 +#define LOPT_GEN_NAMES 296 +#define LOPT_MAXTTL 297 +#define LOPT_NO_REBIND 298 +#define LOPT_LOC_REBND 299 +#define LOPT_ADD_MAC 300 +#define LOPT_DNSSEC 301 +#define LOPT_INCR_ADDR 302 +#define LOPT_CONNTRACK 303 +#define LOPT_FQDN 304 +#define LOPT_LUASCRIPT 305 +#define LOPT_RA 306 +#define LOPT_DUID 307 +#define LOPT_HOST_REC 308 +#define LOPT_TFTP_LC 309 +#define LOPT_RR 310 +#define LOPT_CLVERBIND 311 +#define LOPT_MAXCTTL 312 +#define LOPT_AUTHZONE 313 +#define LOPT_AUTHSERV 314 +#define LOPT_AUTHTTL 315 +#define LOPT_AUTHSOA 316 +#define LOPT_AUTHSFS 317 +#define LOPT_AUTHPEER 318 +#define LOPT_IPSET 319 +#define LOPT_SYNTH 320 #ifdef OPTION6_PREFIX_CLASS -#define LOPT_PREF_CLSS 321 +#define LOPT_PREF_CLSS 321 #endif -#define LOPT_RELAY 323 -#define LOPT_RA_PARAM 324 -#define LOPT_ADD_SBNET 325 +#define LOPT_RELAY 323 +#define LOPT_RA_PARAM 324 +#define LOPT_ADD_SBNET 325 +#define LOPT_QUIET_DHCP 326 +#define LOPT_QUIET_DHCP6 327 +#define LOPT_QUIET_RA 328 #ifdef HAVE_GETOPT_LONG @@ -276,6 +279,9 @@ static const struct myoption opts[] = #endif { "dhcp-relay", 1, 0, LOPT_RELAY }, { "ra-param", 1, 0, LOPT_RA_PARAM }, + { "quiet-dhcp", 0, 0, LOPT_QUIET_DHCP }, + { "quiet-dhcp6", 0, 0, LOPT_QUIET_DHCP6 }, + { "quiet-ra", 0, 0, LOPT_QUIET_RA }, { NULL, 0, 0, 0 } }; @@ -422,6 +428,9 @@ static struct { { LOPT_PREF_CLSS, ARG_DUP, "set:tag,", gettext_noop("Specify DHCPv6 prefix class"), NULL }, #endif { LOPT_RA_PARAM, ARG_DUP, ",[high,|low,][,]", gettext_noop("Set priority, resend-interval and router-lifetime"), NULL }, + { LOPT_QUIET_DHCP, OPT_QUIET_DHCP, NULL, gettext_noop("Do not log routine DHCP."), NULL }, + { LOPT_QUIET_DHCP6, OPT_QUIET_DHCP6, NULL, gettext_noop("Do not log routine DHCPv6."), NULL }, + { LOPT_QUIET_RA, OPT_QUIET_RA, NULL, gettext_noop("Do not log RA."), NULL }, { 0, 0, NULL, NULL, NULL } }; diff --git a/src/radv.c b/src/radv.c index d1147ba..8e0a730 100644 --- a/src/radv.c +++ b/src/radv.c @@ -189,7 +189,8 @@ void icmp6_packet(time_t now) mac = daemon->namebuff; } - my_syslog(MS_DHCP | LOG_INFO, "RTR-SOLICIT(%s) %s", interface, mac); + if (!option_bool(OPT_QUIET_RA)) + my_syslog(MS_DHCP | LOG_INFO, "RTR-SOLICIT(%s) %s", interface, mac); /* source address may not be valid in solicit request. */ send_ra(now, if_index, interface, !IN6_IS_ADDR_UNSPECIFIED(&from.sin6_addr) ? &from.sin6_addr : NULL); } @@ -288,7 +289,8 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de opt->prefix = local; inet_ntop(AF_INET6, &local, daemon->addrbuff, ADDRSTRLEN); - my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s old prefix", iface_name, daemon->addrbuff); + if (!option_bool(OPT_QUIET_RA)) + my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s old prefix", iface_name, daemon->addrbuff); } up = &context->next; @@ -536,7 +538,8 @@ static int add_prefixes(struct in6_addr *local, int prefix, opt->prefix = *local; inet_ntop(AF_INET6, local, daemon->addrbuff, ADDRSTRLEN); - my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s", param->if_name, daemon->addrbuff); + if (!option_bool(OPT_QUIET_RA)) + my_syslog(MS_DHCP | LOG_INFO, "RTR-ADVERT(%s) %s", param->if_name, daemon->addrbuff); } } diff --git a/src/rfc2131.c b/src/rfc2131.c index cb1834b..d339fc9 100644 --- a/src/rfc2131.c +++ b/src/rfc2131.c @@ -34,7 +34,7 @@ static void option_put_string(struct dhcp_packet *mess, unsigned char *end, static struct in_addr option_addr(unsigned char *opt); static unsigned int option_uint(unsigned char *opt, int i, int size); static void log_packet(char *type, void *addr, unsigned char *ext_mac, - int mac_len, char *interface, char *string, u32 xid); + int mac_len, char *interface, char *string, char *err, u32 xid); static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize); static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt, int minsize); static size_t dhcp_packet_size(struct dhcp_packet *mess, unsigned char *agent_id, unsigned char *real_end); @@ -610,7 +610,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, } } - log_packet("BOOTP", logaddr, mess->chaddr, mess->hlen, iface_name, message, mess->xid); + log_packet("BOOTP", logaddr, mess->chaddr, mess->hlen, iface_name, NULL, message, mess->xid); return message ? 0 : dhcp_packet_size(mess, agent_id, real_end); } @@ -827,7 +827,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, opt71.next = daemon->dhcp_opts; do_encap_opts(&opt71, OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0); - log_packet("PXE", &mess->yiaddr, emac, emac_len, iface_name, (char *)mess->file, mess->xid); + log_packet("PXE", &mess->yiaddr, emac, emac_len, iface_name, (char *)mess->file, NULL, mess->xid); log_tags(tagif_netid, ntohl(mess->xid)); return dhcp_packet_size(mess, agent_id, real_end); } @@ -887,7 +887,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, prune_vendor_opts(tagif_netid); do_encap_opts(pxe_opts(pxearch, tagif_netid, context->local, now), OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end, 0); - log_packet("PXE", NULL, emac, emac_len, iface_name, ignore ? "proxy-ignored" : "proxy", mess->xid); + log_packet("PXE", NULL, emac, emac_len, iface_name, ignore ? "proxy-ignored" : "proxy", NULL, mess->xid); log_tags(tagif_netid, ntohl(mess->xid)); return ignore ? 0 : dhcp_packet_size(mess, agent_id, real_end); } @@ -919,7 +919,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, if (!(opt = option_find(mess, sz, OPTION_REQUESTED_IP, INADDRSZ))) return 0; - log_packet("DHCPDECLINE", option_ptr(opt, 0), emac, emac_len, iface_name, daemon->dhcp_buff, mess->xid); + log_packet("DHCPDECLINE", option_ptr(opt, 0), emac, emac_len, iface_name, NULL, daemon->dhcp_buff, mess->xid); if (lease && lease->addr.s_addr == option_addr(opt).s_addr) lease_prune(lease, now); @@ -951,7 +951,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, else message = _("unknown lease"); - log_packet("DHCPRELEASE", &mess->ciaddr, emac, emac_len, iface_name, message, mess->xid); + log_packet("DHCPRELEASE", &mess->ciaddr, emac, emac_len, iface_name, NULL, message, mess->xid); return 0; @@ -1015,7 +1015,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, message = _("no address available"); } - log_packet("DHCPDISCOVER", opt ? option_ptr(opt, 0) : NULL, emac, emac_len, iface_name, message, mess->xid); + log_packet("DHCPDISCOVER", opt ? option_ptr(opt, 0) : NULL, emac, emac_len, iface_name, NULL, message, mess->xid); if (message || !(context = narrow_context(context, mess->yiaddr, tagif_netid))) return 0; @@ -1028,7 +1028,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, log_tags(tagif_netid, ntohl(mess->xid)); - log_packet("DHCPOFFER" , &mess->yiaddr, emac, emac_len, iface_name, NULL, mess->xid); + log_packet("DHCPOFFER" , &mess->yiaddr, emac, emac_len, iface_name, NULL, NULL, mess->xid); time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4)); clear_packet(mess, end); @@ -1144,7 +1144,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, mess->yiaddr = mess->ciaddr; } - log_packet("DHCPREQUEST", &mess->yiaddr, emac, emac_len, iface_name, NULL, mess->xid); + log_packet("DHCPREQUEST", &mess->yiaddr, emac, emac_len, iface_name, NULL, NULL, mess->xid); if (!message) { @@ -1216,7 +1216,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, if (message) { - log_packet("DHCPNAK", &mess->yiaddr, emac, emac_len, iface_name, message, mess->xid); + log_packet("DHCPNAK", &mess->yiaddr, emac, emac_len, iface_name, NULL, message, mess->xid); mess->yiaddr.s_addr = 0; clear_packet(mess, end); @@ -1355,7 +1355,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, else override = lease->override; - log_packet("DHCPACK", &mess->yiaddr, emac, emac_len, iface_name, hostname, mess->xid); + log_packet("DHCPACK", &mess->yiaddr, emac, emac_len, iface_name, hostname, NULL, mess->xid); clear_packet(mess, end); option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK); @@ -1378,7 +1378,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, if (ignore || have_config(config, CONFIG_DISABLE)) message = _("ignored"); - log_packet("DHCPINFORM", &mess->ciaddr, emac, emac_len, iface_name, message, mess->xid); + log_packet("DHCPINFORM", &mess->ciaddr, emac, emac_len, iface_name, message, NULL, mess->xid); if (message || mess->ciaddr.s_addr == 0) return 0; @@ -1404,7 +1404,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, log_tags(tagif_netid, ntohl(mess->xid)); - log_packet("DHCPACK", &mess->ciaddr, emac, emac_len, iface_name, hostname, mess->xid); + log_packet("DHCPACK", &mess->ciaddr, emac, emac_len, iface_name, hostname, NULL, mess->xid); if (lease) { @@ -1538,10 +1538,13 @@ static void add_extradata_opt(struct dhcp_lease *lease, unsigned char *opt) #endif static void log_packet(char *type, void *addr, unsigned char *ext_mac, - int mac_len, char *interface, char *string, u32 xid) + int mac_len, char *interface, char *string, char *err, u32 xid) { struct in_addr a; + if (!err && (!option_bool(OPT_LOG_OPTS) || option_bool(OPT_QUIET_DHCP))) + return; + /* addr may be misaligned */ if (addr) memcpy(&a, addr, sizeof(a)); @@ -1549,22 +1552,24 @@ static void log_packet(char *type, void *addr, unsigned char *ext_mac, print_mac(daemon->namebuff, ext_mac, mac_len); if(option_bool(OPT_LOG_OPTS)) - my_syslog(MS_DHCP | LOG_INFO, "%u %s(%s) %s%s%s %s", + my_syslog(MS_DHCP | LOG_INFO, "%u %s(%s) %s%s%s %s%s", ntohl(xid), type, interface, addr ? inet_ntoa(a) : "", addr ? " " : "", daemon->namebuff, - string ? string : ""); + string ? string : "", + err ? err : ""); else - my_syslog(MS_DHCP | LOG_INFO, "%s(%s) %s%s%s %s", + my_syslog(MS_DHCP | LOG_INFO, "%s(%s) %s%s%s %s%s", type, interface, addr ? inet_ntoa(a) : "", addr ? " " : "", daemon->namebuff, - string ? string : ""); + string ? string : "", + err ? err : ""); } static void log_options(unsigned char *start, u32 xid) diff --git a/src/rfc3315.c b/src/rfc3315.c index bbdc5a8..bf3bacf 100644 --- a/src/rfc3315.c +++ b/src/rfc3315.c @@ -41,6 +41,7 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz, static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_t sz, int is_unicast, time_t now); static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_opts); static void log6_packet(struct state *state, char *type, struct in6_addr *addr, char *string); +static void log6_quiet(struct state *state, char *type, struct in6_addr *addr, char *string); static void *opt6_find (void *opts, void *end, unsigned int search, unsigned int minsize); static void *opt6_next(void *opts, void *end); static unsigned int opt6_uint(unsigned char *opt, int offset, int size); @@ -595,7 +596,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ end_opt6(o); } - log6_packet(state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL); + log6_quiet(state, "DHCPSOLICIT", NULL, ignore ? _("ignored") : NULL); request_no_address: solicit_tags = tagif; @@ -815,7 +816,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ *outmsgtypep = DHCP6REPLY; state->lease_allocate = 1; - log6_packet(state, "DHCPREQUEST", NULL, ignore ? _("ignored") : NULL); + log6_quiet(state, "DHCPREQUEST", NULL, ignore ? _("ignored") : NULL); if (ignore) return 0; @@ -928,7 +929,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ /* set reply message type */ *outmsgtypep = DHCP6REPLY; - log6_packet(state, "DHCPRENEW", NULL, NULL); + log6_quiet(state, "DHCPRENEW", NULL, NULL); for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { @@ -1011,8 +1012,11 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ message = _("address invalid"); } - log6_packet(state, "DHCPREPLY", req_addr, message); - + if (message) + log6_packet(state, "DHCPREPLY", req_addr, message); + else + log6_quiet(state, "DHCPREPLY", req_addr, message); + o1 = new_opt6(OPTION6_IAADDR); put_opt6(req_addr, sizeof(*req_addr)); put_opt6_long(preferred_time); @@ -1034,7 +1038,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ /* set reply message type */ *outmsgtypep = DHCP6REPLY; - log6_packet(state, "DHCPCONFIRM", NULL, NULL); + log6_quiet(state, "DHCPCONFIRM", NULL, NULL); for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { @@ -1055,7 +1059,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ return 1; } - log6_packet(state, "DHCPREPLY", req_addr, state->hostname); + log6_quiet(state, "DHCPREPLY", req_addr, state->hostname); } } @@ -1084,7 +1088,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ else state->send_domain = get_domain6(NULL); - log6_packet(state, "DHCPINFORMATION-REQUEST", NULL, ignore ? _("ignored") : state->hostname); + log6_quiet(state, "DHCPINFORMATION-REQUEST", NULL, ignore ? _("ignored") : state->hostname); if (ignore) return 0; *outmsgtypep = DHCP6REPLY; @@ -1098,7 +1102,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ /* set reply message type */ *outmsgtypep = DHCP6REPLY; - log6_packet(state, "DHCPRELEASE", NULL, NULL); + log6_quiet(state, "DHCPRELEASE", NULL, NULL); for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { @@ -1160,7 +1164,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_ /* set reply message type */ *outmsgtypep = DHCP6REPLY; - log6_packet(state, "DHCPDECLINE", NULL, NULL); + log6_quiet(state, "DHCPDECLINE", NULL, NULL); for (opt = state->packet_options; opt; opt = opt6_next(opt, state->end)) { @@ -1610,7 +1614,7 @@ static void add_address(struct state *state, struct dhcp_context *context, unsig } } - log6_packet(state, state->lease_allocate ? "DHCPREPLY" : "DHCPADVERTISE", addr, state->hostname); + log6_quiet(state, state->lease_allocate ? "DHCPREPLY" : "DHCPADVERTISE", addr, state->hostname); } @@ -1880,6 +1884,12 @@ static void log6_opts(int nest, unsigned int xid, void *start_opts, void *end_op } } +static void log6_quiet(struct state *state, char *type, struct in6_addr *addr, char *string) +{ + if (option_bool(OPT_LOG_OPTS) || !option_bool(OPT_QUIET_DHCP6)) + log6_packet(state, type, addr, string); +} + static void log6_packet(struct state *state, char *type, struct in6_addr *addr, char *string) { int clid_len = state->clid_len; diff --git a/src/slaac.c b/src/slaac.c index 0229d9e..43c2c38 100644 --- a/src/slaac.c +++ b/src/slaac.c @@ -200,7 +200,8 @@ void slaac_ping_reply(struct in6_addr *sender, unsigned char *packet, char *inte slaac->backoff = 0; gotone = 1; inet_ntop(AF_INET6, sender, daemon->addrbuff, ADDRSTRLEN); - my_syslog(MS_DHCP | LOG_INFO, "SLAAC-CONFIRM(%s) %s %s", interface, daemon->addrbuff, lease->hostname); + if (!option_bool(OPT_QUIET_DHCP6)) + my_syslog(MS_DHCP | LOG_INFO, "SLAAC-CONFIRM(%s) %s %s", interface, daemon->addrbuff, lease->hostname); } lease_update_dns(gotone); From d56a604a9600c08d4a863527d549713c07f0186d Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 11 Oct 2013 14:39:03 +0100 Subject: [PATCH 46/67] CNAMEs can now point to interface names. --- CHANGELOG | 4 ++++ man/dnsmasq.8 | 2 +- src/cache.c | 53 +++++++++++++++++++++++++++++++++++++++------------ src/dnsmasq.h | 8 ++++++-- src/rfc1035.c | 24 ++++++++++++++--------- 5 files changed, 67 insertions(+), 24 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index b04fbd7..3919d1d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -140,6 +140,10 @@ version 2.67 Add --quiet-dhcp, --quiet-dhcp6 and --quiet-ra. Thanks to Kevin Darbyshire-Bryant for the initial patch. + Allow A/AAAA records created by --interface-name to be the + target of --cname. Thanks to Hadmut Danisch for the + suggestion. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index 6bcd2f9..123c98f 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -497,7 +497,7 @@ Return an NAPTR DNS record, as specified in RFC3403. Return a CNAME record which indicates that is really . There are significant limitations on the target; it must be a DNS name which is known to dnsmasq from /etc/hosts (or additional -hosts files), from DHCP or from another +hosts files), from DHCP, from --interface-name or from another .B --cname. If the target does not satisfy this criteria, the whole cname is ignored. The cname must be unique, but it diff --git a/src/cache.c b/src/cache.c index 6fdeba2..6247cab 100644 --- a/src/cache.c +++ b/src/cache.c @@ -24,7 +24,7 @@ static struct crec *new_chain = NULL; static int cache_inserted = 0, cache_live_freed = 0, insert_error; static union bigname *big_free = NULL; static int bignames_left, hash_size; -static int uid = 0; +static int uid = 1; #ifdef HAVE_DNSSEC static struct keydata *keyblock_free = NULL; #endif @@ -76,7 +76,7 @@ void cache_init(void) { struct crec *crecp; int i; - + bignames_left = daemon->cachesize/10; if (daemon->cachesize > 0) @@ -177,7 +177,10 @@ static void cache_free(struct crec *crecp) crecp->flags &= ~F_FORWARD; crecp->flags &= ~F_REVERSE; crecp->uid = uid++; /* invalidate CNAMES pointing to this. */ - + + if (uid == -1) + uid++; + if (cache_tail) cache_tail->next = crecp; else @@ -235,6 +238,16 @@ char *cache_get_name(struct crec *crecp) return crecp->name.sname; } +char *cache_get_cname_target(struct crec *crecp) +{ + if (crecp->addr.cname.uid != -1) + return cache_get_name(crecp->addr.cname.target.cache); + + return crecp->addr.cname.target.int_name->name; +} + + + struct crec *cache_enumerate(int init) { static int bucket; @@ -260,14 +273,14 @@ struct crec *cache_enumerate(int init) static int is_outdated_cname_pointer(struct crec *crecp) { - if (!(crecp->flags & F_CNAME)) + if (!(crecp->flags & F_CNAME) || crecp->addr.cname.uid == -1) return 0; /* NB. record may be reused as DS or DNSKEY, where uid is overloaded for something completely different */ - if (crecp->addr.cname.cache && - (crecp->addr.cname.cache->flags & (F_IPV4 | F_IPV6 | F_CNAME)) && - crecp->addr.cname.uid == crecp->addr.cname.cache->uid) + if (crecp->addr.cname.target.cache && + (crecp->addr.cname.target.cache->flags & (F_IPV4 | F_IPV6 | F_CNAME)) && + crecp->addr.cname.uid == crecp->addr.cname.target.cache->uid) return 0; return 1; @@ -680,9 +693,9 @@ static void add_hosts_cname(struct crec *target) if (hostname_isequal(cache_get_name(target), a->target) && (crec = whine_malloc(sizeof(struct crec)))) { - crec->flags = F_FORWARD | F_IMMORTAL | F_NAMEP | F_HOSTS | F_CNAME; + crec->flags = F_FORWARD | F_IMMORTAL | F_NAMEP | F_CONFIG | F_CNAME; crec->name.namep = a->alias; - crec->addr.cname.cache = target; + crec->addr.cname.target.cache = target; crec->addr.cname.uid = target->uid; cache_hash(crec); add_hosts_cname(crec); /* handle chains */ @@ -901,6 +914,8 @@ void cache_reload(void) struct hostsfile *ah; struct host_record *hr; struct name_list *nl; + struct cname *a; + struct interface_name *intr; cache_inserted = cache_live_freed = 0; @@ -927,6 +942,20 @@ void cache_reload(void) up = &cache->hash_next; } + /* Add CNAMEs to interface_names to the cache */ + for (a = daemon->cnames; a; a = a->next) + for (intr = daemon->int_names; intr; intr = intr->next) + if (hostname_isequal(a->target, intr->name)) + { + struct crec *aliasc = safe_malloc(sizeof(struct crec)); + aliasc->flags = F_FORWARD | F_NAMEP | F_CNAME | F_IMMORTAL | F_CONFIG; + aliasc->name.namep = a->alias; + aliasc->addr.cname.target.int_name = intr; + aliasc->addr.cname.uid = -1; + cache_hash(aliasc); + add_hosts_cname(aliasc); /* handle chains */ + } + /* borrow the packet buffer for a temporary by-address hash */ memset(daemon->packet, 0, daemon->packet_buff_sz); revhashsz = daemon->packet_buff_sz / sizeof(struct crec *); @@ -1019,13 +1048,13 @@ static void add_dhcp_cname(struct crec *target, time_t ttd) if (aliasc) { - aliasc->flags = F_FORWARD | F_NAMEP | F_DHCP | F_CNAME; + aliasc->flags = F_FORWARD | F_NAMEP | F_DHCP | F_CNAME | F_CONFIG; if (ttd == 0) aliasc->flags |= F_IMMORTAL; else aliasc->ttd = ttd; aliasc->name.namep = a->alias; - aliasc->addr.cname.cache = target; + aliasc->addr.cname.target.cache = target; aliasc->addr.cname.uid = target->uid; cache_hash(aliasc); add_dhcp_cname(aliasc, ttd); @@ -1173,7 +1202,7 @@ void dump_cache(time_t now) { a = ""; if (!is_outdated_cname_pointer(cache)) - a = cache_get_name(cache->addr.cname.cache); + a = cache_get_cname_target(cache); } #ifdef HAVE_DNSSEC else if (cache->flags & F_DNSKEY) diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 24676ed..272d0a2 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -337,8 +337,11 @@ struct crec { union { struct all_addr addr; struct { - struct crec *cache; - int uid; + union { + struct crec *cache; + struct interface_name *int_name; + } target; + int uid; /* -1 if union is interface-name */ } cname; struct { struct keydata *keydata; @@ -941,6 +944,7 @@ struct in_addr a_record_from_hosts(char *name, time_t now); void cache_unhash_dhcp(void); void dump_cache(time_t now); char *cache_get_name(struct crec *crecp); +char *cache_get_cname_target(struct crec *crecp); struct crec *cache_enumerate(int init); #ifdef HAVE_DNSSEC struct keydata *keydata_alloc(char *data, size_t len); diff --git a/src/rfc1035.c b/src/rfc1035.c index 5e7fe95..7c1c30d 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -1042,10 +1042,10 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t newc = cache_insert(name, NULL, now, attl, F_CNAME | F_FORWARD); if (newc) { - newc->addr.cname.cache = NULL; + newc->addr.cname.target.cache = NULL; if (cpp) { - cpp->addr.cname.cache = newc; + cpp->addr.cname.target.cache = newc; cpp->addr.cname.uid = newc->uid; } } @@ -1085,7 +1085,7 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t newc = cache_insert(name, &addr, now, attl, flags | F_FORWARD); if (newc && cpp) { - cpp->addr.cname.cache = newc; + cpp->addr.cname.target.cache = newc; cpp->addr.cname.uid = newc->uid; } cpp = NULL; @@ -1112,7 +1112,7 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t newc = cache_insert(name, NULL, now, ttl ? ttl : cttl, F_FORWARD | F_NEG | flags); if (newc && cpp) { - cpp->addr.cname.cache = newc; + cpp->addr.cname.target.cache = newc; cpp->addr.cname.uid = newc->uid; } } @@ -1720,7 +1720,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen, } /* interface name stuff */ - + intname_restart: for (intr = daemon->int_names; intr; intr = intr->next) if (hostname_isequal(name, intr->name)) break; @@ -1784,17 +1784,23 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen, if (crecp->flags & F_CNAME) { + char *cname_target = cache_get_cname_target(crecp); + if (!dryrun) { log_query(crecp->flags, name, NULL, record_source(crecp->uid)); if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, crec_ttl(crecp, now), &nameoffset, - T_CNAME, C_IN, "d", cache_get_name(crecp->addr.cname.cache))) + T_CNAME, C_IN, "d", cname_target)) anscount++; } - strcpy(name, cache_get_name(crecp->addr.cname.cache)); - goto cname_restart; + strcpy(name, cname_target); + /* check if target interface_name */ + if (crecp->addr.cname.uid == -1) + goto intname_restart; + else + goto cname_restart; } if (crecp->flags & F_NEG) @@ -1856,7 +1862,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen, log_query(crecp->flags, name, NULL, record_source(crecp->uid)); if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, crec_ttl(crecp, now), &nameoffset, - T_CNAME, C_IN, "d", cache_get_name(crecp->addr.cname.cache))) + T_CNAME, C_IN, "d", cache_get_cname_target(crecp))) anscount++; } } From 24b5a5d50bc793f7e218ef6018ad210eab28c686 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 11 Oct 2013 15:19:28 +0100 Subject: [PATCH 47/67] dhcp-host selection fix for v4/v6 --- CHANGELOG | 5 +++++ src/dhcp-common.c | 37 ++++++++++++++++++------------------- src/rfc1035.c | 14 +++++++------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3919d1d..8b57a36 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -144,6 +144,11 @@ version 2.67 target of --cname. Thanks to Hadmut Danisch for the suggestion. + Avoid treating a --dhcp-host which has an IPv6 address + as eligable for use with DHCPv4 on the grounds that it has + no address, and vice-versa. Thanks to Yury Konovalov for + spotting the problem. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/src/dhcp-common.c b/src/dhcp-common.c index 304c47e..5b0756d 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -272,27 +272,26 @@ static int is_config_in_context(struct dhcp_context *context, struct dhcp_config if (!context) /* called via find_config() from lease_update_from_configs() */ return 1; - if (!(context->flags & CONTEXT_V6)) - { - if (!(config->flags & CONFIG_ADDR)) + if (!(config->flags & (CONFIG_ADDR | CONFIG_ADDR6))) + return 1; + +#ifdef HAVE_DHCP6 + if ((context->flags & CONTEXT_V6) && (config->flags & CONFIG_WILDCARD)) + return 1; +#endif + + for (; context; context = context->current) +#ifdef HAVE_DHCP6 + if (context->flags & CONTEXT_V6) + { + if ((config->flags & CONFIG_ADDR6) && is_same_net6(&config->addr6, &context->start6, context->prefix)) + return 1; + } + else +#endif + if ((config->flags & CONFIG_ADDR) && is_same_net(config->addr, context->start, context->netmask)) return 1; - for (; context; context = context->current) - if (is_same_net(config->addr, context->start, context->netmask)) - return 1; - } -#ifdef HAVE_DHCP6 - else - { - if (!(config->flags & CONFIG_ADDR6) || (config->flags & CONFIG_WILDCARD)) - return 1; - - for (; context; context = context->current) - if (is_same_net6(&config->addr6, &context->start6, context->prefix)) - return 1; - } -#endif - return 0; } diff --git a/src/rfc1035.c b/src/rfc1035.c index 7c1c30d..c1dc716 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -644,20 +644,20 @@ size_t calc_subnet_opt(struct subnet_opt *opt, union mysockaddr *source) int len; void *addrp; - if (source->sa.sa_family == AF_INET) - { - opt->family = htons(1); - opt->source_netmask = daemon->addr4_netmask; - addrp = &source->in.sin_addr; - } #ifdef HAVE_IPV6 - else + if (source->sa.sa_family == AF_INET6) { opt->family = htons(2); opt->source_netmask = daemon->addr6_netmask; addrp = &source->in6.sin6_addr; } + else #endif + { + opt->family = htons(1); + opt->source_netmask = daemon->addr4_netmask; + addrp = &source->in.sin_addr; + } opt->scope_netmask = 0; len = 0; From 3b3f441189d070127f5c5176d24009fc0d178bc5 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 11 Oct 2013 16:33:28 +0100 Subject: [PATCH 48/67] Log SO_BINDTODEVICE use at startup. --- src/dhcp-common.c | 36 +++++++++++++++++++++--------------- src/dnsmasq.c | 30 ++++++++++++++++++++++++------ src/dnsmasq.h | 3 ++- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/dhcp-common.c b/src/dhcp-common.c index 5b0756d..028178a 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -444,7 +444,7 @@ void dhcp_update_configs(struct dhcp_config *configs) } #ifdef HAVE_LINUX_NETWORK -void bindtodevice(int fd) +char *whichdevice(void) { /* If we are doing DHCP on exactly one interface, and running linux, do SO_BINDTODEVICE to that device. This is for the use case of (eg) OpenStack, which runs a new @@ -459,13 +459,13 @@ void bindtodevice(int fd) struct irec *iface, *found; struct iname *if_tmp; - + if (!daemon->if_names) - return; - + return NULL; + for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next) if (if_tmp->name && (!if_tmp->used || strchr(if_tmp->name, '*'))) - return; + return NULL; for (found = NULL, iface = daemon->interfaces; iface; iface = iface->next) if (iface->dhcp_ok) @@ -473,18 +473,24 @@ void bindtodevice(int fd) if (!found) found = iface; else if (strcmp(found->name, iface->name) != 0) - return; /* more than one. */ + return NULL; /* more than one. */ } - + if (found) - { - struct ifreq ifr; - strcpy(ifr.ifr_name, found->name); - /* only allowed by root. */ - if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) == -1 && - errno != EPERM) - die(_("failed to set SO_BINDTODEVICE on DHCP socket: %s"), NULL, EC_BADNET); - } + return found->name; + + return NULL; +} + +void bindtodevice(char *device, int fd) +{ + struct ifreq ifr; + + strcpy(ifr.ifr_name, device); + /* only allowed by root. */ + if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) == -1 && + errno != EPERM) + die(_("failed to set SO_BINDTODEVICE on DHCP socket: %s"), NULL, EC_BADNET); } #endif diff --git a/src/dnsmasq.c b/src/dnsmasq.c index f1c9500..83d77d8 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -50,6 +50,8 @@ int main (int argc, char **argv) #if defined(HAVE_LINUX_NETWORK) cap_user_header_t hdr = NULL; cap_user_data_t data = NULL; + char *bound_device = NULL; + int did_bind = 0; #endif #if defined(HAVE_DHCP) || defined(HAVE_DHCP6) struct dhcp_context *context; @@ -239,18 +241,29 @@ int main (int argc, char **argv) #if defined(HAVE_LINUX_NETWORK) && defined(HAVE_DHCP) /* after enumerate_interfaces() */ + bound_device = whichdevice(); + if (daemon->dhcp) { - if (!daemon->relay4) - bindtodevice(daemon->dhcpfd); - if (daemon->enable_pxe) - bindtodevice(daemon->pxefd); + if (!daemon->relay4 && bound_device) + { + bindtodevice(bound_device, daemon->dhcpfd); + did_bind = 1; + } + if (daemon->enable_pxe && bound_device) + { + bindtodevice(bound_device, daemon->pxefd); + did_bind = 1; + } } #endif #if defined(HAVE_LINUX_NETWORK) && defined(HAVE_DHCP6) - if (daemon->doing_dhcp6 && !daemon->relay6) - bindtodevice(daemon->dhcp6fd); + if (daemon->doing_dhcp6 && !daemon->relay6 && bound_device) + { + bindtodevice(bound_device, daemon->dhcp6fd); + did_bind = 1; + } #endif } else @@ -659,6 +672,11 @@ int main (int argc, char **argv) my_syslog(MS_DHCP | LOG_INFO, _("IPv6 router advertisement enabled")); # endif +# ifdef HAVE_LINUX_NETWORK + if (did_bind) + my_syslog(MS_DHCP | LOG_INFO, _("DHCP, sockets bound exclusively to interface %s"), bound_device); +# endif + /* after dhcp_contruct_contexts */ if (daemon->dhcp || daemon->doing_dhcp6) lease_find_interfaces(now); diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 272d0a2..adf0828 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -1268,7 +1268,8 @@ struct dhcp_config *find_config(struct dhcp_config *configs, int hw_type, char *hostname); int config_has_mac(struct dhcp_config *config, unsigned char *hwaddr, int len, int type); #ifdef HAVE_LINUX_NETWORK -void bindtodevice(int fd); +char *whichdevice(void); +void bindtodevice(char *device, int fd); #endif # ifdef HAVE_DHCP6 void display_opts6(void); From 806cf78797bfe912a4912fd035d4f5eeb3d46718 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 14 Oct 2013 14:08:44 +0100 Subject: [PATCH 49/67] Better defaults for address and lifetime of RDNS option in RA. --- src/radv.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/radv.c b/src/radv.c index 8e0a730..88395db 100644 --- a/src/radv.c +++ b/src/radv.c @@ -336,15 +336,15 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de if (opt_cfg->opt == OPTION6_DNS_SERVER) { struct in6_addr *a = (struct in6_addr *)opt_cfg->val; - + done_dns = 1; - if (opt_cfg->len == 0) - continue; + if (opt_cfg->len == 0 || (IN6_IS_ADDR_UNSPECIFIED(a) && parm.pref_time != 0)) + continue; put_opt6_char(ICMP6_OPT_RDNSS); put_opt6_char((opt_cfg->len/8) + 1); put_opt6_short(0); - put_opt6_long(parm.adv_interval * 2); /* lifetime - twice RA retransmit */ + put_opt6_long(parm.pref_time); /* zero means "self" */ for (i = 0; i < opt_cfg->len; i += IN6ADDRSZ, a++) if (IN6_IS_ADDR_UNSPECIFIED(a)) @@ -360,7 +360,7 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de put_opt6_char(ICMP6_OPT_DNSSL); put_opt6_char(len + 1); put_opt6_short(0); - put_opt6_long(parm.adv_interval * 2); /* lifetime - twice RA retransmit */ + put_opt6_long(parm.pref_time); put_opt6(opt_cfg->val, opt_cfg->len); /* pad */ @@ -369,14 +369,14 @@ static void send_ra(time_t now, int iface, char *iface_name, struct in6_addr *de } } - if (daemon->port == NAMESERVER_PORT && !done_dns) + if (daemon->port == NAMESERVER_PORT && !done_dns && parm.pref_time != 0) { /* default == us, as long as we are supplying DNS service. */ put_opt6_char(ICMP6_OPT_RDNSS); put_opt6_char(3); put_opt6_short(0); - put_opt6_long(parm.adv_interval * 2); /* lifetime - twice RA retransmit */ - put_opt6(&parm.link_global, IN6ADDRSZ); + put_opt6_long(parm.pref_time); + put_opt6(&parm.link_local, IN6ADDRSZ); } /* set managed bits unless we're providing only RA on this link */ From 3bb51da8359a82627becc6613f867c4cf870ab2b Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 14 Oct 2013 14:20:34 +0100 Subject: [PATCH 50/67] Fix d56a604a9600c08d4a863527d549713c07f0186d re ANY queries. --- src/rfc1035.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rfc1035.c b/src/rfc1035.c index c1dc716..c0b6c17 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -1779,7 +1779,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen, { /* don't answer wildcard queries with data not from /etc/hosts or DHCP leases */ - if (qtype == T_ANY && !(crecp->flags & (F_HOSTS | F_DHCP))) + if (qtype == T_ANY && !(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG))) break; if (crecp->flags & F_CNAME) From 486479e94308f8579ad5132a5218a74dbc707521 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 14 Oct 2013 17:18:03 +0100 Subject: [PATCH 51/67] Check prefix length when contructing DHCP ranges. --- src/dhcp6.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dhcp6.c b/src/dhcp6.c index 1a7aa48..7b0adcf 100644 --- a/src/dhcp6.c +++ b/src/dhcp6.c @@ -624,7 +624,8 @@ static int construct_worker(struct in6_addr *local, int prefix, } } - else if (wildcard_match(template->template_interface, ifrn_name)) + else if (wildcard_match(template->template_interface, ifrn_name) && + template->prefix == prefix) { start6 = *local; setaddr6part(&start6, addr6part(&template->start6)); From e136725c5b13960958ee9fe85a771102ba24dc44 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 14 Oct 2013 17:23:54 +0100 Subject: [PATCH 52/67] Remove RA_INTERVAL from config.h - it's configurable now. --- src/config.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/config.h b/src/config.h index 31ae1cb..0edc4af 100644 --- a/src/config.h +++ b/src/config.h @@ -45,7 +45,6 @@ #define SOA_REFRESH 1200 /* SOA refresh default */ #define SOA_RETRY 180 /* SOA retry default */ #define SOA_EXPIRY 1209600 /* SOA expiry default */ -#define RA_INTERVAL 600 /* Send unsolicited RA's this often when not provoked. */ /* compile-time options: uncomment below to enable or do eg. make COPTS=-DHAVE_BROKEN_RTC From 45cca585922f4c351cb17cb69d3c0d32cd3e03c9 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Tue, 15 Oct 2013 10:20:13 +0100 Subject: [PATCH 53/67] Fix caching of dangling CNAMEs. --- CHANGELOG | 3 ++ src/rfc1035.c | 145 ++++++++++++++++++++++++-------------------------- 2 files changed, 74 insertions(+), 74 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 8b57a36..77acde2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -149,6 +149,9 @@ version 2.67 no address, and vice-versa. Thanks to Yury Konovalov for spotting the problem. + Do a better job caching dangling CNAMEs. Thanks to Yves + Dorfsman for spotting the problem. + version 2.66 Add the ability to act as an authoritative DNS diff --git a/src/rfc1035.c b/src/rfc1035.c index c0b6c17..655216e 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -1011,91 +1011,88 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t else continue; - if (!(flags & F_NXDOMAIN)) + cname_loop1: + if (!(p1 = skip_questions(header, qlen))) + return 0; + + for (j = ntohs(header->ancount); j != 0; j--) { - cname_loop1: - if (!(p1 = skip_questions(header, qlen))) - return 0; + if (!(res = extract_name(header, qlen, &p1, name, 0, 10))) + return 0; /* bad packet */ - for (j = ntohs(header->ancount); j != 0; j--) + GETSHORT(aqtype, p1); + GETSHORT(aqclass, p1); + GETLONG(attl, p1); + if ((daemon->max_ttl != 0) && (attl > daemon->max_ttl) && !is_sign) { - if (!(res = extract_name(header, qlen, &p1, name, 0, 10))) - return 0; /* bad packet */ - - GETSHORT(aqtype, p1); - GETSHORT(aqclass, p1); - GETLONG(attl, p1); - if ((daemon->max_ttl != 0) && (attl > daemon->max_ttl) && !is_sign) + (p1) -= 4; + PUTLONG(daemon->max_ttl, p1); + } + GETSHORT(ardlen, p1); + endrr = p1+ardlen; + + if (aqclass == C_IN && res != 2 && (aqtype == T_CNAME || aqtype == qtype)) + { + if (aqtype == T_CNAME) { - (p1) -= 4; - PUTLONG(daemon->max_ttl, p1); - } - GETSHORT(ardlen, p1); - endrr = p1+ardlen; - - if (aqclass == C_IN && res != 2 && (aqtype == T_CNAME || aqtype == qtype)) - { - if (aqtype == T_CNAME) + if (!cname_count--) + return 0; /* looped CNAMES */ + newc = cache_insert(name, NULL, now, attl, F_CNAME | F_FORWARD); + if (newc) { - if (!cname_count--) - return 0; /* looped CNAMES */ - newc = cache_insert(name, NULL, now, attl, F_CNAME | F_FORWARD); - if (newc) - { - newc->addr.cname.target.cache = NULL; - if (cpp) - { - cpp->addr.cname.target.cache = newc; - cpp->addr.cname.uid = newc->uid; - } - } - - cpp = newc; - if (attl < cttl) - cttl = attl; - - if (!extract_name(header, qlen, &p1, name, 1, 0)) - return 0; - goto cname_loop1; - } - else - { - found = 1; - - /* copy address into aligned storage */ - if (!CHECK_LEN(header, p1, qlen, addrlen)) - return 0; /* bad packet */ - memcpy(&addr, p1, addrlen); - - /* check for returned address in private space */ - if (check_rebind && - (flags & F_IPV4) && - private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND))) - return 1; - -#ifdef HAVE_IPSET - if (ipsets && (flags & (F_IPV4 | F_IPV6))) - { - ipsets_cur = ipsets; - while (*ipsets_cur) - add_to_ipset(*ipsets_cur++, &addr, flags, 0); - } -#endif - - newc = cache_insert(name, &addr, now, attl, flags | F_FORWARD); - if (newc && cpp) + newc->addr.cname.target.cache = NULL; + if (cpp) { cpp->addr.cname.target.cache = newc; cpp->addr.cname.uid = newc->uid; } - cpp = NULL; } + + cpp = newc; + if (attl < cttl) + cttl = attl; + + if (!extract_name(header, qlen, &p1, name, 1, 0)) + return 0; + goto cname_loop1; + } + else if (!(flags & F_NXDOMAIN)) + { + found = 1; + + /* copy address into aligned storage */ + if (!CHECK_LEN(header, p1, qlen, addrlen)) + return 0; /* bad packet */ + memcpy(&addr, p1, addrlen); + + /* check for returned address in private space */ + if (check_rebind && + (flags & F_IPV4) && + private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND))) + return 1; + +#ifdef HAVE_IPSET + if (ipsets && (flags & (F_IPV4 | F_IPV6))) + { + ipsets_cur = ipsets; + while (*ipsets_cur) + add_to_ipset(*ipsets_cur++, &addr, flags, 0); + } +#endif + + newc = cache_insert(name, &addr, now, attl, flags | F_FORWARD); + if (newc && cpp) + { + cpp->addr.cname.target.cache = newc; + cpp->addr.cname.uid = newc->uid; + } + cpp = NULL; } - - p1 = endrr; - if (!CHECK_LEN(header, p1, qlen, 0)) - return 0; /* bad packet */ } + + p1 = endrr; + if (!CHECK_LEN(header, p1, qlen, 0)) + return 0; /* bad packet */ } if (!found && !option_bool(OPT_NO_NEG)) @@ -2035,7 +2032,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen, if (trunc) header->hb3 |= HB3_TC; - if (anscount == 0 && nxdomain) + if (nxdomain) SET_RCODE(header, NXDOMAIN); else SET_RCODE(header, NOERROR); /* no error */ From dc27e148a154079929510c3fda978045b64440dc Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Wed, 16 Oct 2013 13:09:53 +0100 Subject: [PATCH 54/67] Warning when using --bind-interfaces and routeable addresses. --- src/dnsmasq.c | 3 +++ src/dnsmasq.h | 4 +++- src/network.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++- src/rfc1035.c | 2 +- 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 83d77d8..a2b37dc 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -632,6 +632,8 @@ int main (int argc, char **argv) if (bind_fallback) my_syslog(LOG_WARNING, _("setting --bind-interfaces option because of OS limitations")); + + warn_bound_listeners(); if (!option_bool(OPT_NOWILD)) for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next) @@ -856,6 +858,7 @@ int main (int argc, char **argv) enumerate_interfaces(0); /* NB, is_dad_listeners() == 1 --> we're binding interfaces */ create_bound_listeners(0); + warn_bound_listeners(); } #ifdef HAVE_LINUX_NETWORK diff --git a/src/dnsmasq.h b/src/dnsmasq.h index adf0828..17a351f 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -454,7 +454,7 @@ struct ipsets { struct irec { union mysockaddr addr; struct in_addr netmask; /* only valid for IPv4 */ - int tftp_ok, dhcp_ok, mtu, done, dad, dns_auth, index, multicast_done; + int tftp_ok, dhcp_ok, mtu, done, warned, dad, dns_auth, index, multicast_done; char *name; struct irec *next; }; @@ -988,6 +988,7 @@ unsigned char *skip_questions(struct dns_header *header, size_t plen); int extract_name(struct dns_header *header, size_t plen, unsigned char **pp, char *name, int isExtract, int extrabytes); int in_arpa_name_2_addr(char *namein, struct all_addr *addrp); +int private_net(struct in_addr addr, int ban_localhost); /* auth.c */ #ifdef HAVE_AUTH @@ -1068,6 +1069,7 @@ void check_servers(void); int enumerate_interfaces(int reset); void create_wildcard_listeners(void); void create_bound_listeners(int die); +void warn_bound_listeners(void); int is_dad_listeners(void); int iface_check(int family, struct all_addr *addr, char *name, int *auth_dns); int loopback_exception(int fd, int family, struct all_addr *addr, char *name); diff --git a/src/network.c b/src/network.c index fc0346e..de5d9f2 100644 --- a/src/network.c +++ b/src/network.c @@ -16,6 +16,10 @@ #include "dnsmasq.h" +#ifndef IN6_IS_ADDR_ULA +#define IN6_IS_ADDR_ULA(a) ((((__const uint32_t *) (a))[0] & htonl (0xfe00000)) == htonl (0xfc000000)) +#endif + #ifdef HAVE_LINUX_NETWORK int indextoname(int fd, int index, char *name) @@ -383,7 +387,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label, iface->dns_auth = auth_dns; iface->mtu = mtu; iface->dad = dad; - iface->done = iface->multicast_done = 0; + iface->done = iface->multicast_done = iface->warned = 0; iface->index = if_index; if ((iface->name = whine_malloc(strlen(ifr.ifr_name)+1))) { @@ -824,6 +828,59 @@ void create_bound_listeners(int dienow) } } +/* In --bind-interfaces, the only access control is the addresses we're listening on. + There's nothing to avoid a query to the address of an internal interface arriving via + an external interface where we don't want to accept queries, except that in the usual + case the addresses of internal interfaces are RFC1918. When bind-interfaces in use, + and we listen on an address that looks like it's probably globally routeable, shout. + + The fix is to use --bind-dynamic, which actually checks the arrival interface too. + Tough if your platform doesn't support this. +*/ + +void warn_bound_listeners(void) +{ + struct irec *iface; + int advice = 0; + + for (iface = daemon->interfaces; iface; iface = iface->next) + if (option_bool(OPT_NOWILD) && !iface->dns_auth) + { + int warn = 0; + if (iface->addr.sa.sa_family == AF_INET) + { + if (!private_net(iface->addr.in.sin_addr, 1)) + { + inet_ntop(AF_INET, &iface->addr.in.sin_addr, daemon->addrbuff, ADDRSTRLEN); + warn = 1; + } + } +#ifdef HAVE_IPV6 + else + { + if (!IN6_IS_ADDR_LINKLOCAL(&iface->addr.in6.sin6_addr) && + !IN6_IS_ADDR_SITELOCAL(&iface->addr.in6.sin6_addr) && + !IN6_IS_ADDR_ULA(&iface->addr.in6.sin6_addr) && + !IN6_IS_ADDR_LOOPBACK(&iface->addr.in6.sin6_addr)) + { + inet_ntop(AF_INET6, &iface->addr.in6.sin6_addr, daemon->addrbuff, ADDRSTRLEN); + warn = 1; + } + } +#endif + if (warn) + { + iface->warned = advice = 1; + my_syslog(LOG_WARNING, + _("LOUD WARNING: listening on %s may accept requests via interfaces other than %s. "), + daemon->addrbuff, iface->name); + } + } + + if (advice) + my_syslog(LOG_WARNING, _("LOUD WARNING: use --bind-dynamic rather than --bind-interfaces to avoid DNS amplification attacks via these interface(s).")); +} + int is_dad_listeners(void) { struct irec *iface; diff --git a/src/rfc1035.c b/src/rfc1035.c index 655216e..573ec31 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -724,7 +724,7 @@ int check_source(struct dns_header *header, size_t plen, unsigned char *pseudohe } /* is addr in the non-globally-routed IP space? */ -static int private_net(struct in_addr addr, int ban_localhost) +int private_net(struct in_addr addr, int ban_localhost) { in_addr_t ip_addr = ntohl(addr.s_addr); From 53c4c5c85942d4733f4723531c4d325235448326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= Date: Fri, 18 Oct 2013 13:53:05 +0100 Subject: [PATCH 55/67] Fix crash at startup when dhcp-host with client-ids is present. --- src/dhcp-common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/dhcp-common.c b/src/dhcp-common.c index 028178a..a92d728 100644 --- a/src/dhcp-common.c +++ b/src/dhcp-common.c @@ -315,8 +315,9 @@ struct dhcp_config *find_config(struct dhcp_config *configs, return config; /* dhcpcd prefixes ASCII client IDs by zero which is wrong, but we try and - cope with that here */ - if (!(context->flags & CONTEXT_V6) && *clid == 0 && config->clid_len == clid_len-1 && + cope with that here. This is IPv4 only. context==NULL implies IPv4, + see lease_update_from_configs() */ + if ((!context || !(context->flags & CONTEXT_V6)) && *clid == 0 && config->clid_len == clid_len-1 && memcmp(config->clid, clid+1, clid_len-1) == 0 && is_config_in_context(context, config)) return config; From b485ed97aa5726644d71d3a16ccdd058d6a8d73a Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Fri, 18 Oct 2013 22:00:39 +0100 Subject: [PATCH 56/67] Always answer queries for authoritative zones locally, never forward. --- src/auth.c | 2 +- src/cache.c | 3 +++ src/dnsmasq.h | 3 ++- src/forward.c | 36 ++++++++++++++++++++++++++++++++---- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/auth.c b/src/auth.c index af2171c..98934d0 100644 --- a/src/auth.c +++ b/src/auth.c @@ -62,7 +62,7 @@ static int filter_constructed_dhcp(struct auth_zone *zone, int flag, struct all_ return filter_zone(zone, flag, addr_u) != NULL; } -static int in_zone(struct auth_zone *zone, char *name, char **cut) +int in_zone(struct auth_zone *zone, char *name, char **cut) { size_t namelen = strlen(name); size_t domainlen = strlen(zone->domain); diff --git a/src/cache.c b/src/cache.c index 6247cab..d99aba6 100644 --- a/src/cache.c +++ b/src/cache.c @@ -1161,6 +1161,9 @@ void dump_cache(time_t now) daemon->cachesize, cache_live_freed, cache_inserted); my_syslog(LOG_INFO, _("queries forwarded %u, queries answered locally %u"), daemon->queries_forwarded, daemon->local_answer); +#ifdef HAVE_AUTH + my_syslog(LOG_INFO, _("queries for authoritative zones %u"), daemon->auth_answer); +#endif /* sum counts from different records for same server */ for (serv = daemon->servers; serv; serv = serv->next) diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 17a351f..0166a70 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -876,7 +876,7 @@ extern struct daemon { char *packet; /* packet buffer */ int packet_buff_sz; /* size of above */ char *namebuff; /* MAXDNAME size buffer */ - unsigned int local_answer, queries_forwarded; + unsigned int local_answer, queries_forwarded, auth_answer; struct frec *frec_list; struct serverfd *sfds; struct irec *interfaces; @@ -993,6 +993,7 @@ int private_net(struct in_addr addr, int ban_localhost); /* auth.c */ #ifdef HAVE_AUTH size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr); +int in_zone(struct auth_zone *zone, char *name, char **cut); #endif /* util.c */ diff --git a/src/forward.c b/src/forward.c index adc4a0f..26a7863 100644 --- a/src/forward.c +++ b/src/forward.c @@ -848,6 +848,9 @@ void receive_query(struct listener *listen, time_t now) if (extract_request(header, (size_t)n, daemon->namebuff, &type)) { char types[20]; +#ifdef HAVE_AUTH + struct auth_zone *zone; +#endif querystr(auth_dns ? "auth" : "query", types, type); @@ -859,15 +862,28 @@ void receive_query(struct listener *listen, time_t now) log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, (struct all_addr *)&source_addr.in6.sin6_addr, types); #endif - } +#ifdef HAVE_AUTH + /* find queries for zones we're authoritative for, and answer them directly */ + for (zone = daemon->auth_zones; zone; zone = zone->next) + if (in_zone(zone, daemon->namebuff, NULL)) + { + auth_dns = 1; + break; + } +#endif + } + #ifdef HAVE_AUTH if (auth_dns) { m = answer_auth(header, ((char *) header) + PACKETSZ, (size_t)n, now, &source_addr); if (m >= 1) - send_from(listen->fd, option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND), - (char *)header, m, &source_addr, &dst_addr, if_index); + { + send_from(listen->fd, option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND), + (char *)header, m, &source_addr, &dst_addr, if_index); + daemon->auth_answer++; + } } else #endif @@ -939,7 +955,9 @@ unsigned char *tcp_request(int confd, time_t now, if ((gotname = extract_request(header, (unsigned int)size, daemon->namebuff, &qtype))) { char types[20]; - +#ifdef HAVE_AUTH + struct auth_zone *zone; +#endif querystr(auth_dns ? "auth" : "query", types, qtype); if (peer_addr.sa.sa_family == AF_INET) @@ -950,6 +968,16 @@ unsigned char *tcp_request(int confd, time_t now, log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff, (struct all_addr *)&peer_addr.in6.sin6_addr, types); #endif + +#ifdef HAVE_AUTH + /* find queries for zones we're authoritative for, and answer them directly */ + for (zone = daemon->auth_zones; zone; zone = zone->next) + if (in_zone(zone, daemon->namebuff, NULL)) + { + auth_dns = 1; + break; + } +#endif } if (local_addr->sa.sa_family == AF_INET) From 19b16891615806f02e19da4035181934a84b5165 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Sun, 20 Oct 2013 10:19:39 +0100 Subject: [PATCH 57/67] Don't filter by subnet when handling local queries for auth-zones. --- src/auth.c | 39 ++++++++++++++++++++++----------------- src/dnsmasq.h | 3 ++- src/forward.c | 9 ++++++--- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/auth.c b/src/auth.c index 98934d0..0125649 100644 --- a/src/auth.c +++ b/src/auth.c @@ -89,7 +89,7 @@ int in_zone(struct auth_zone *zone, char *name, char **cut) } -size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr) +size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr, int local_query) { char *name = daemon->namebuff; unsigned char *p, *ansp; @@ -97,7 +97,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n int nameoffset, axfroffset = 0; int q, anscount = 0, authcount = 0; struct crec *crecp; - int auth = 1, trunc = 0, nxdomain = 1, soa = 0, ns = 0, axfr = 0; + int auth = !local_query, trunc = 0, nxdomain = 1, soa = 0, ns = 0, axfr = 0; struct auth_zone *zone = NULL; struct subnet *subnet = NULL; char *cut; @@ -144,16 +144,19 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n if (!(flag = in_arpa_name_2_addr(name, &addr))) continue; - for (zone = daemon->auth_zones; zone; zone = zone->next) - if ((subnet = filter_zone(zone, flag, &addr))) - break; - - if (!zone) + if (!local_query) { - auth = 0; - continue; + for (zone = daemon->auth_zones; zone; zone = zone->next) + if ((subnet = filter_zone(zone, flag, &addr))) + break; + + if (!zone) + { + auth = 0; + continue; + } } - + intr = NULL; if (flag == F_IPV4) @@ -367,7 +370,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n nxdomain = 0; for (; addrlist; addrlist = addrlist->next) - if (filter_constructed_dhcp(zone, flag, &addrlist->addr)) + if (local_query || filter_constructed_dhcp(zone, flag, &addrlist->addr)) { found = 1; log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL); @@ -462,7 +465,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n { nxdomain = 0; if ((crecp->flags & flag) && - (filter_constructed_dhcp(zone, flag, &(crecp->addr.addr)))) + (local_query || filter_constructed_dhcp(zone, flag, &(crecp->addr.addr)))) { *cut = '.'; /* restore domain part */ log_query(crecp->flags, name, &crecp->addr.addr, record_source(crecp->uid)); @@ -485,7 +488,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n do { nxdomain = 0; - if ((crecp->flags & flag) && filter_constructed_dhcp(zone, flag, &(crecp->addr.addr))) + if ((crecp->flags & flag) && (local_query || filter_constructed_dhcp(zone, flag, &(crecp->addr.addr)))) { log_query(crecp->flags, name, &crecp->addr.addr, record_source(crecp->uid)); found = 1; @@ -675,14 +678,14 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n *cut = 0; for (addrlist = intr->addr4; addrlist; addrlist = addrlist->next) - if (filter_constructed_dhcp(zone, F_IPV4, &addrlist->addr) && + if ((local_query || filter_constructed_dhcp(zone, F_IPV4, &addrlist->addr)) && add_resource_record(header, limit, &trunc, -axfroffset, &ansp, daemon->auth_ttl, NULL, T_A, C_IN, "4", cut ? intr->name : NULL, &addrlist->addr)) anscount++; #ifdef HAVE_IPV6 for (addrlist = intr->addr6; addrlist; addrlist = addrlist->next) - if (filter_constructed_dhcp(zone, F_IPV6, &addrlist->addr) && + if ((local_query || filter_constructed_dhcp(zone, F_IPV6, &addrlist->addr)) && add_resource_record(header, limit, &trunc, -axfroffset, &ansp, daemon->auth_ttl, NULL, T_AAAA, C_IN, "6", cut ? intr->name : NULL, &addrlist->addr)) anscount++; @@ -722,7 +725,8 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n if ((crecp->flags & F_DHCP) && !option_bool(OPT_DHCP_FQDN)) { char *cache_name = cache_get_name(crecp); - if (!strchr(cache_name, '.') && filter_constructed_dhcp(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))) + if (!strchr(cache_name, '.') && + (local_query || filter_constructed_dhcp(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr)))) { qtype = T_A; #ifdef HAVE_IPV6 @@ -739,7 +743,8 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n if ((crecp->flags & F_HOSTS) || (((crecp->flags & F_DHCP) && option_bool(OPT_DHCP_FQDN)))) { strcpy(name, cache_get_name(crecp)); - if (in_zone(zone, name, &cut) && filter_constructed_dhcp(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr))) + if (in_zone(zone, name, &cut) && + (local_query || filter_constructed_dhcp(zone, (crecp->flags & (F_IPV6 | F_IPV4)), &(crecp->addr.addr)))) { qtype = T_A; #ifdef HAVE_IPV6 diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 0166a70..4d368c5 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -992,7 +992,8 @@ int private_net(struct in_addr addr, int ban_localhost); /* auth.c */ #ifdef HAVE_AUTH -size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr); +size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, + time_t now, union mysockaddr *peer_addr, int local_query); int in_zone(struct auth_zone *zone, char *name, char **cut); #endif diff --git a/src/forward.c b/src/forward.c index 26a7863..623fde7 100644 --- a/src/forward.c +++ b/src/forward.c @@ -676,7 +676,7 @@ void receive_query(struct listener *listen, time_t now) size_t m; ssize_t n; int if_index = 0; - int auth_dns = 0; + int local_auth = 0, auth_dns = 0; struct iovec iov[1]; struct msghdr msg; struct cmsghdr *cmptr; @@ -869,6 +869,7 @@ void receive_query(struct listener *listen, time_t now) if (in_zone(zone, daemon->namebuff, NULL)) { auth_dns = 1; + local_auth = 1; break; } #endif @@ -877,7 +878,7 @@ void receive_query(struct listener *listen, time_t now) #ifdef HAVE_AUTH if (auth_dns) { - m = answer_auth(header, ((char *) header) + PACKETSZ, (size_t)n, now, &source_addr); + m = answer_auth(header, ((char *) header) + PACKETSZ, (size_t)n, now, &source_addr, local_auth); if (m >= 1) { send_from(listen->fd, option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND), @@ -914,6 +915,7 @@ unsigned char *tcp_request(int confd, time_t now, { size_t size = 0; int norebind = 0; + int local_auth = 0; int checking_disabled, check_subnet; size_t m; unsigned short qtype; @@ -975,6 +977,7 @@ unsigned char *tcp_request(int confd, time_t now, if (in_zone(zone, daemon->namebuff, NULL)) { auth_dns = 1; + local_auth = 1; break; } #endif @@ -987,7 +990,7 @@ unsigned char *tcp_request(int confd, time_t now, #ifdef HAVE_AUTH if (auth_dns) - m = answer_auth(header, ((char *) header) + 65536, (size_t)size, now, &peer_addr); + m = answer_auth(header, ((char *) header) + 65536, (size_t)size, now, &peer_addr, local_auth); else #endif { From 5f8002fcd7a6020e1332ab38bf1d9d66dee850d5 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 21 Oct 2013 17:40:18 +0100 Subject: [PATCH 58/67] Restore NS and SOA records to local auth queries. --- src/auth.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/auth.c b/src/auth.c index 0125649..52d2a68 100644 --- a/src/auth.c +++ b/src/auth.c @@ -406,7 +406,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n if (qtype == T_SOA) { - soa = 1; /* inhibits auth section */ + auth = soa = 1; /* inhibits auth section */ found = 1; log_query(F_RRNAME | F_AUTH, zone->domain, NULL, ""); } @@ -439,6 +439,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n return 0; } + auth = 1; soa = 1; /* inhibits auth section */ ns = 1; /* ensure we include NS records! */ axfr = 1; @@ -448,6 +449,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n } else if (qtype == T_NS) { + auth = 1; ns = 1; /* inhibits auth section */ found = 1; log_query(F_RRNAME | F_AUTH, zone->domain, NULL, ""); From fb63dd1345b23dc8ca9e8d3f9dfa5c3614668416 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 21 Oct 2013 18:19:35 +0100 Subject: [PATCH 59/67] Handle two interface-names, different interface, same name. --- src/auth.c | 43 ++++++++++++++++++++++--------------------- src/rfc1035.c | 42 ++++++++++++++++++++++++++---------------- 2 files changed, 48 insertions(+), 37 deletions(-) diff --git a/src/auth.c b/src/auth.c index 52d2a68..50fb61d 100644 --- a/src/auth.c +++ b/src/auth.c @@ -357,29 +357,30 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n flag = F_IPV6; #endif - for (intr = daemon->int_names; intr; intr = intr->next) - if (hostname_isequal(name, intr->name)) - { - struct addrlist *addrlist; - - addrlist = intr->addr4; + if (flag) + for (intr = daemon->int_names; intr; intr = intr->next) + if (hostname_isequal(name, intr->name)) + { + struct addrlist *addrlist; + + addrlist = intr->addr4; #ifdef HAVE_IPV6 - if (qtype == T_AAAA) - addrlist = intr->addr6; + if (qtype == T_AAAA) + addrlist = intr->addr6; #endif - nxdomain = 0; - - for (; addrlist; addrlist = addrlist->next) - if (local_query || filter_constructed_dhcp(zone, flag, &addrlist->addr)) - { - found = 1; - log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL); - if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, - daemon->auth_ttl, NULL, qtype, C_IN, - qtype == T_A ? "4" : "6", &addrlist->addr)) - anscount++; - } - } + nxdomain = 0; + + for (; addrlist; addrlist = addrlist->next) + if (local_query || filter_constructed_dhcp(zone, flag, &addrlist->addr)) + { + found = 1; + log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL); + if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, + daemon->auth_ttl, NULL, qtype, C_IN, + qtype == T_A ? "4" : "6", &addrlist->addr)) + anscount++; + } + } for (a = daemon->cnames; a; a = a->next) if (hostname_isequal(name, a->alias) ) diff --git a/src/rfc1035.c b/src/rfc1035.c index 573ec31..fc6d09c 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -1725,29 +1725,39 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen, if (intr) { struct addrlist *addrlist; + int gotit = 0; enumerate_interfaces(0); - addrlist = intr->addr4; + for (intr = daemon->int_names; intr; intr = intr->next) + if (hostname_isequal(name, intr->name)) + { + addrlist = intr->addr4; #ifdef HAVE_IPV6 - if (type == T_AAAA) - addrlist = intr->addr6; + if (type == T_AAAA) + addrlist = intr->addr6; #endif - ans = 1; - if (!dryrun) - { - if (!addrlist) - log_query(F_FORWARD | F_CONFIG | flag | F_NEG, name, NULL, NULL); - else - for (; addrlist; addrlist = addrlist->next) + ans = 1; + if (!dryrun) { - log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL); - if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, - daemon->local_ttl, NULL, type, C_IN, - type == T_A ? "4" : "6", &addrlist->addr)) - anscount++; + if (addrlist) + { + gotit = 1; + for (; addrlist; addrlist = addrlist->next) + { + log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL); + if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, + daemon->local_ttl, NULL, type, C_IN, + type == T_A ? "4" : "6", &addrlist->addr)) + anscount++; + } + } } - } + } + + if (!dryrun && !gotit) + log_query(F_FORWARD | F_CONFIG | flag | F_NEG, name, NULL, NULL); + continue; } From 57310500622f57315b401c405a07e579ced6417c Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 21 Oct 2013 18:26:20 +0100 Subject: [PATCH 60/67] Get NXDOMAIN right for local queries to auth zones. --- src/auth.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auth.c b/src/auth.c index 50fb61d..1c1f12a 100644 --- a/src/auth.c +++ b/src/auth.c @@ -793,7 +793,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n if (trunc) header->hb3 |= HB3_TC; - if (anscount == 0 && auth && nxdomain) + if ((auth || local_query) && nxdomain) SET_RCODE(header, NXDOMAIN); else SET_RCODE(header, NOERROR); /* no error */ From 8ab91e9f7fc0f58279537f93d78fa86c30b8a756 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 21 Oct 2013 20:50:04 +0100 Subject: [PATCH 61/67] Get NXDOMAIN right on non-A/AAAA query for name known via interface-name. --- src/auth.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/auth.c b/src/auth.c index 1c1f12a..5646ca3 100644 --- a/src/auth.c +++ b/src/auth.c @@ -197,7 +197,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n if (in_zone(zone, intr->name, NULL)) { found = 1; - log_query(flag| F_REVERSE | F_CONFIG, intr->name, &addr, NULL); + log_query(flag | F_REVERSE | F_CONFIG, intr->name, &addr, NULL); if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, daemon->auth_ttl, NULL, T_PTR, C_IN, "d", intr->name)) @@ -357,19 +357,19 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n flag = F_IPV6; #endif - if (flag) - for (intr = daemon->int_names; intr; intr = intr->next) - if (hostname_isequal(name, intr->name)) - { - struct addrlist *addrlist; - - addrlist = intr->addr4; + for (intr = daemon->int_names; intr; intr = intr->next) + if (hostname_isequal(name, intr->name)) + { + struct addrlist *addrlist; + + addrlist = intr->addr4; #ifdef HAVE_IPV6 - if (qtype == T_AAAA) - addrlist = intr->addr6; + if (qtype == T_AAAA) + addrlist = intr->addr6; #endif - nxdomain = 0; - + nxdomain = 0; + + if (flag) for (; addrlist; addrlist = addrlist->next) if (local_query || filter_constructed_dhcp(zone, flag, &addrlist->addr)) { From 93bafe619d3d41575f1d70ab50052eba7c0fa6fe Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 21 Oct 2013 21:19:34 +0100 Subject: [PATCH 62/67] Fix CNAME botch in auth code, also set RA flag for local queries. --- src/auth.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/auth.c b/src/auth.c index 5646ca3..91b5a71 100644 --- a/src/auth.c +++ b/src/auth.c @@ -394,7 +394,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n } found = 1; if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, - daemon->auth_ttl, NULL, + daemon->auth_ttl, &nameoffset, T_CNAME, C_IN, "d", name)) anscount++; @@ -782,8 +782,17 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n /* done all questions, set up header and return length of result */ /* clear authoritative and truncated flags, set QR flag */ header->hb3 = (header->hb3 & ~(HB3_AA | HB3_TC)) | HB3_QR; - /* clear RA flag */ - header->hb4 &= ~HB4_RA; + + if (local_query) + { + /* set RA flag */ + header->hb4 |= HB4_RA; + } + else + { + /* clear RA flag */ + header->hb4 &= ~HB4_RA; + } /* authoritive */ if (auth) From 6008bdbbc101f9ed7f002272a6e9c8e8ff677902 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 21 Oct 2013 21:47:03 +0100 Subject: [PATCH 63/67] Fix botch in determining if auth query is local. --- src/auth.c | 2 +- src/forward.c | 30 ++++++++++++++++-------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/auth.c b/src/auth.c index 91b5a71..4a1075b 100644 --- a/src/auth.c +++ b/src/auth.c @@ -110,7 +110,7 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n if (ntohs(header->qdcount) == 0 || OPCODE(header) != QUERY ) return 0; - + /* determine end of question section (we put answers there) */ if (!(ansp = skip_questions(header, qlen))) return 0; /* bad packet */ diff --git a/src/forward.c b/src/forward.c index 623fde7..7ed8880 100644 --- a/src/forward.c +++ b/src/forward.c @@ -865,13 +865,14 @@ void receive_query(struct listener *listen, time_t now) #ifdef HAVE_AUTH /* find queries for zones we're authoritative for, and answer them directly */ - for (zone = daemon->auth_zones; zone; zone = zone->next) - if (in_zone(zone, daemon->namebuff, NULL)) - { - auth_dns = 1; - local_auth = 1; - break; - } + if (!auth_dns) + for (zone = daemon->auth_zones; zone; zone = zone->next) + if (in_zone(zone, daemon->namebuff, NULL)) + { + auth_dns = 1; + local_auth = 1; + break; + } #endif } @@ -973,13 +974,14 @@ unsigned char *tcp_request(int confd, time_t now, #ifdef HAVE_AUTH /* find queries for zones we're authoritative for, and answer them directly */ - for (zone = daemon->auth_zones; zone; zone = zone->next) - if (in_zone(zone, daemon->namebuff, NULL)) - { - auth_dns = 1; - local_auth = 1; - break; - } + if (!auth_dns) + for (zone = daemon->auth_zones; zone; zone = zone->next) + if (in_zone(zone, daemon->namebuff, NULL)) + { + auth_dns = 1; + local_auth = 1; + break; + } #endif } From a9bf81ad91335b9de0f1fd038614983eb81fbfa7 Mon Sep 17 00:00:00 2001 From: Gildas <3ntr0p13@gmail.com> Date: Thu, 24 Oct 2013 13:31:40 +0100 Subject: [PATCH 64/67] Message typo. --- src/option.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/option.c b/src/option.c index 329ad5a..3184509 100644 --- a/src/option.c +++ b/src/option.c @@ -423,7 +423,7 @@ static struct { { LOPT_AUTHSFS, ARG_DUP, "[,...]", gettext_noop("Secondary authoritative nameservers for forward domains"), NULL }, { LOPT_AUTHPEER, ARG_DUP, "[,...]", gettext_noop("Peers which are allowed to do zone transfer"), NULL }, { LOPT_IPSET, ARG_DUP, "//[,...]", gettext_noop("Specify ipsets to which matching domains should be added"), NULL }, - { LOPT_SYNTH, ARG_DUP, ",,[]", gettext_noop("Specify a domain and address range for sythesised names"), NULL }, + { LOPT_SYNTH, ARG_DUP, ",,[]", gettext_noop("Specify a domain and address range for synthesised names"), NULL }, #ifdef OPTION6_PREFIX_CLASS { LOPT_PREF_CLSS, ARG_DUP, "set:tag,", gettext_noop("Specify DHCPv6 prefix class"), NULL }, #endif From 227ddad9b5b120c6045dca9936a60a3b4691c23c Mon Sep 17 00:00:00 2001 From: Kevin Darbyshire-Bryant Date: Thu, 24 Oct 2013 17:47:00 +0100 Subject: [PATCH 65/67] Fix logic botch in quiet-dhcp option. --- src/rfc2131.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rfc2131.c b/src/rfc2131.c index d339fc9..a49e076 100644 --- a/src/rfc2131.c +++ b/src/rfc2131.c @@ -1542,7 +1542,7 @@ static void log_packet(char *type, void *addr, unsigned char *ext_mac, { struct in_addr a; - if (!err && (!option_bool(OPT_LOG_OPTS) || option_bool(OPT_QUIET_DHCP))) + if (!err && !option_bool(OPT_LOG_OPTS) && option_bool(OPT_QUIET_DHCP)) return; /* addr may be misaligned */ From 1f776a4aa211fd7772f26abc8586c5c7752687c5 Mon Sep 17 00:00:00 2001 From: Gildas <3ntr0p13@gmail.com> Date: Fri, 25 Oct 2013 10:05:22 +0100 Subject: [PATCH 66/67] Update French translation. --- man/fr/dnsmasq.8 | 164 ++++++++++++++++++++++++++++++++++++++++------- po/fr.po | 37 +++++------ 2 files changed, 158 insertions(+), 43 deletions(-) diff --git a/man/fr/dnsmasq.8 b/man/fr/dnsmasq.8 index 2ae0d09..0de4333 100644 --- a/man/fr/dnsmasq.8 +++ b/man/fr/dnsmasq.8 @@ -403,7 +403,8 @@ noms de domains entourés par des '/', selon une syntaxe similaire à l'option Ne pas vérifier régulièrement si le fichier /etc/resolv.conf a été modifié. .TP .B --clear-on-reload -Lorsque le fichier /etc/resolv.conf est relu, vider le cache DNS. +Lorsque le fichier /etc/resolv.conf est relu, ou si les serveurs amonts sont +configurés via DBus, vider le cache DNS. Cela est utile si les nouveaux serveurs sont susceptibles d'avoir des données différentes de celles stockées dans le cache. .TP @@ -596,9 +597,9 @@ Retourne un enregistrement de type NAPTR, tel que spécifié dans le RFC3403. .TP .B --cname=, Retourne un enregistrement de type CNAME qui indique que est en -réalité . Il existe des contraintes significatives sur la valeur -de cible; il doit s'agir d'un nom DNS qui est connu de dnsmasq via /etc/hosts -(ou un fichier hôtes additionnel), ou via DHCP, ou par un autre +réalité . Il existe des contraintes importantes sur la valeur +cible; il doit s'agir d'un nom DNS qui est connu de dnsmasq via /etc/hosts +(ou un fichier hôtes additionnel), via DHCP, via interface--name ou par un autre .B --cname. Si une cible ne satisfait pas ces critères, le CNAME est ignoré. Le CNAME doit être unique, mais il est autorisé d'avoir plus d'un CNAME pointant @@ -622,6 +623,24 @@ Plus d'un nom peut être associé à une interface donnée en répétant cette o plusieurs fois; dans ce cas, l'enregistrement inverse pointe vers le nom fourni dans la première instance de cette option. .TP +.B --synth-domain=,[,] +Créé des enregistrements A/AAAA ou PTR pour une plage d'adresses. Les +enregistrements utilisent l'adresse ainsi que les points (ou les deux points +dans le cas d'IPv6) remplacés par des tirets. + +Un exemple devrait rendre cela plus clair : +La configuration +.B --synth-domain=thekelleys.org.uk,192.168.0.0/24,internal- +permet de retourner internal-192-168-0-56.thekelleys.org.uk lors d'une requête +sur l'adresse 192.168.0.56 et vice-versa pour la requête inverse. La même +logique s'applique pour IPv6, avec la particularité suivante : les adresses +IPv6 pouvant commencer par '::', mais les noms DNS ne pouvant pas commencer +par '-', si aucun préfixe n'est donné, un zéro est ajouté en début de nom. +Ainsi, ::1 devient 0--1. + +La plage d'adresses peut-être de la forme +, ou / +.TP .B --add-mac Ajoute l'adresse MAC du requêteur aux requêtes DNS transmises aux serveurs amonts. Cela peut être utilisé dans un but de filtrage DNS par les serveurs @@ -630,7 +649,20 @@ même sous-réseau que le serveur dnsmasq. Veuillez noter que le mécanisme utilisé pour effectuer cela (une option EDNS0) n'est pas encore standardisée, aussi cette fonctionalité doit être considérée comme expérimentale. Notez également qu'exposer les adresses MAC de la sorte peut avoir des implications -en termes de sécurité et de vie privée. +en termes de sécurité et de vie privée. L'avertissement donné pour --add-subnet +s'applique également ici. +.TP +.B --add-subnet[[=],] +Rajoute l'adresse de sous-réseau du requêteur aux requêtes DNS transmises +aux serveurs amonts. La quantité d'adresses transmises dépend du paramètre +longueur du préfixe : 32 (ou 128 dans le cas d'IPv6) transmet la totalité +de l'adresse, 0 n'en transmet aucun mais marque néanmoins la requête ce qui +fait qu'aucun serveur amont ne rajoutera d'adresse client. La valeur par +défaut est zéro et pour IPv4 et pour IPv6. A noter que les serveurs amonts +peuvent-être configurés pour retourner des valeurs différentes en fonction +de cette information mais que le cache de dnsmasq n'en tient pas compte. +Si une instance de dnsmasq est configurée de telle maniêre que des valeurs +différentes pourraient-être rencontrés, alors le cache devrait être désactivé. .TP .B \-c, --cache-size= Définit la taille du cache de Dnsmasq. La valeur par défaut est de 150 noms. @@ -665,15 +697,20 @@ Si vous utilisez le premier mode DNSSEC, la validation par le resolveur des clients, cette option n'est pas requise. Dnsmasq retourne toujours toutes les données nécessaires par un client pour effectuer la validation lui-même. .TP -.B --auth-zone=[,[,.....]] + +.B --auth-zone=[,[/][,[/].....]] Définie une zone DNS pour laquelle dnsmasq agit en temps que serveur faisant autorité. Les enregistrements DNS définis localement et correspondant à ce -domaine seront fournis, à ceci près que les enregistrements A et AAAA doivent -se situer dans l'un des sous-réseaux précisés si ceux-ci sont définis, ou dans -un réseau correspondant à une plage DHCP. Le ou les sous-réseaux sont également -utilisé pour définir les domaines in-addr.arpa et ipv6.arpa servant à -l'interrogation DNS inverse. Dans le cas d'IPv4, la longueur du masque de -réseau doit être de 8, 16 ou 24. +domaine seront fournis. Les enregistrements A et AAAA doivent se situer dans +l'un des sous-réseaux définis, ou dans un réseau correspondant à une plage DHCP +(ce comportement peut-être désactivé par +.B constructor-noauth: +). Le ou les sous-réseaux sont également utilisé(s) pour définir les domaines +in-addr.arpa et ipv6.arpa servant à l'interrogation DNS inverse. Si la longueur +de préfixe n'est pas spécifiée, elle sera par défaut de 24 pour IPv4 et 64 pour +IPv6. Dans le cas d'IPv4, la longueur du masque de réseau devrait-être de 8, 16 +ou 24, sauf si en cas de mise en place d'une délégation de la zone in-addr.arpa +conforme au RFC 2317. .TP .B --auth-soa=[,[,[,[,]]]] Spécifie les champs de l'enregistrement de type SOA (Start Of Authority) @@ -762,6 +799,27 @@ rendues obsolètes puis supprimées lorsque l'adress est rendue obsolète puis supprimée. Le nom de l'interface peut être spécifié avec un caractère joker '*' final. +provoque la recherche d'adresses sur eth0 et crée une plage allant de +::1 à :400. Si l'interface est assignée à +plus d'un réseau, les plages correspondantes seront respectivement +automatiquement créées, rendues obsolètes et supprimées lorsque l'adresse +est rendue obsolète et supprimée. Le nom de l'interface peut être spécifié avec +un caractère joker '*' final. Les adresses autoconfigurées, privées ou +obsolètes ne conviennent pas. + +Si une plage dhcp-range est uniquement utilisée pour du DHCP sans-état +("stateless") ou de l'autoconfiguration sans état ("SLAAC"), alors l'adresse +peut-être indiquée sous la forme '::' + +.B --dhcp-range=::,constructor:eth0 + +Il existe une variante de la syntaxe constructor: qui consiste en l'utilisation +du mot-clef +.B constructor-noauth. +Voir +.B --auth-zone +pour des explications à ce sujet. + L'identifiant de label optionnel .B set: