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 | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 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 [ "$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. +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 [ -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 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 "direccin errnea en %s lnea %d" -#: cache.c:885 dhcp.c:861 +#: cache.c:885 dhcp.c:835 #, c-format msgid "bad name at %s line %d" msgstr "nombre errneo en %s lnea %d" -#: cache.c:892 dhcp.c:936 +#: cache.c:892 dhcp.c:910 #, c-format msgid "read %s - %d addresses" msgstr "direccines %s - %d ledas" @@ -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 direccin %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 "tamao de cach %d, %d/%d insercines de cach reutilizaron objetos no vencidos." -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "bsquedas reenviadas %u, bsquedas 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: bsquedas 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 nmeros 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 direccin(es) locales dnde escuchar." -#: option.c:287 +#: option.c:293 msgid "Return ipaddr for all hosts in specified domains." msgstr "Retornar ipaddr (direccin 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 bsquedas reversas para rangos de direccin privados RFC1918." -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "Tratar ipaddr (direccin IP) como NXDOMAIN (derrota comodn Verisign)." -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "Especificar tamao 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 configuracin (%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 bsquedas sin parte de dominio." -#: option.c:294 +#: option.c:300 msgid "Return self-pointing MX records for local hosts." msgstr "Retornar expedientes MX auto-sealadores 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 mquinas 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 duracin 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 despus del inicio (%s por predeterminado)." -#: option.c:299 +#: option.c:305 msgid "Set address or hostname for a specified machine." msgstr "Fijar direccin o nombre de host para una mquina 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 expresin 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 ledo 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 (identificacin de circuito) RFC3046 a etiqueta." -#: option.c:309 +#: option.c:315 msgid "Map RFC3046 remote-id to tag." msgstr "Trazar remote-id (identificacin remota) RFC3046 a etiqueta." -#: option.c:310 +#: option.c:316 msgid "Map RFC3993 subscriber-id to tag." msgstr "Trazar subscriber-id (identificacin 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 peridicamente, recargar solo con SIGHUP." -#: option.c:320 +#: option.c:326 msgid "Do NOT cache failed search results." msgstr "NO almacenar en cach resultados de bsquedas 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 "Opcin DHCP enviada an 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 bsquedas 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 "Tamao mximo de paquetes UDP soportado para EDNS.0 (%s por predeterminado)." -#: option.c:326 +#: option.c:332 #, fuzzy msgid "Log DNS queries." msgstr "Bitacorear bsquedas DNS." -#: option.c:327 +#: option.c:333 #, fuzzy msgid "Force the originating port for upstream DNS queries." msgstr "Enforzar el puerto original para bsquedas 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 direccin(es) de servidores upstream con dominios opcionales." -#: option.c:331 +#: option.c:337 msgid "Never forward queries to specified domains." msgstr "Nunca reenviar bsquedas 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 informacin sobre la versin 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 nmero mximo 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 bsquedas DNS en base a la interface a la cul 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 direccin 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 informacin sobre hosts DHCP estticos 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, slo proveer DNS." -#: option.c:353 +#: option.c:359 msgid "Enable dynamic address allocation for bootp." msgstr "Habilitar alocacin dinmica de direccines para BOOTP." -#: option.c:354 +#: option.c:360 #, fuzzy msgid "Map MAC address (with wildcards) to option set." msgstr "Trazar direccin MAC (con comodnes) a opcin 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 verificacin de direccines 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 guin 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 guin 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 guin 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 configuracin 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 "Nmero mximo de bsquedas DNS simultneas. (%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 va 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 "Nmero mximo de transferencias TFTP simultneas (%s por predeterminado)." -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "Deshabilitar la extensin TFTP blocksize (tamao 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 efmeros 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 asincrnico; opcionalmente fijar tamao de cola." -#: option.c:377 +#: option.c:383 msgid "Stop DNS rebinding. Filter private IP ranges when resolving." msgstr "Detener revinculacin 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 revinculacin 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 proteccin de revinculacin DNS en este dominio." -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "Siempre realizar bsquedas 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 opcin 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 ms bajo disponible para transmisin de bsquedas 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 configuracin." -#: 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 lnea de comandos.\n" -#: option.c:600 +#: option.c:609 #, fuzzy, c-format msgid "Valid options are:\n" msgstr "Opciones vlidas son :\n" -#: option.c:650 option.c:654 +#: option.c:659 option.c:663 msgid "bad port" msgstr "puerto errneo" -#: option.c:681 option.c:713 +#: option.c:690 option.c:722 msgid "interface binding not supported" msgstr "vinculacin 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 errneo" -#: option.c:720 +#: option.c:729 #, fuzzy msgid "bad address" msgstr "direccin IP errnea" -#: option.c:847 +#: option.c:863 msgid "unsupported encapsulation for IPv6 option" msgstr "" -#: option.c:861 +#: option.c:877 msgid "bad dhcp-option" msgstr "opcin dhcp-option errnea" -#: option.c:929 +#: option.c:945 #, fuzzy msgid "bad IP address" msgstr "direccin IP errnea" -#: option.c:932 option.c:1070 option.c:2549 +#: option.c:948 option.c:1086 option.c:2620 #, fuzzy msgid "bad IPv6 address" msgstr "direccin IP errnea" -#: option.c:1097 option.c:1191 +#: option.c:1113 option.c:1207 msgid "bad domain in dhcp-option" msgstr "dominio errneo en dhcp-option" -#: option.c:1229 +#: option.c:1245 msgid "dhcp-option too long" msgstr "opcin 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 "opcin 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 errnea" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "nombre MX errneo" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "destino MX errneo" -#: option.c:1515 +#: option.c:1531 msgid "cannot run scripts under uClinux" msgstr "no se pueden correr archivos guines 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 guines 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 guines de cambio de arriendo" -#: option.c:1631 +#: option.c:1739 option.c:1800 #, fuzzy msgid "bad prefix" msgstr "puerto errneo" -#: 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 guines de cambio de arriendo" -#: option.c:2223 +#: option.c:2274 #, fuzzy msgid "bad port range" msgstr "rango de puertos errneo" -#: option.c:2239 +#: option.c:2290 msgid "bad bridge-interface" msgstr "opcin bridge-interface (interface puente) errnea" -#: 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 "opcin dhcp-range (rango DHCP) errnea" -#: 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 "opcin dhcp-host errnea" -#: 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 "direccin IP duplicada %s en %s." -#: option.c:2645 +#: option.c:2716 #, fuzzy msgid "bad DHCP host name" msgstr "nombre de host DHCP errneo" -#: option.c:2727 +#: option.c:2798 #, fuzzy msgid "bad tag-if" msgstr "destino MX errneo" -#: option.c:3051 option.c:3379 +#: option.c:3122 option.c:3479 msgid "invalid port number" msgstr "nmero de puerto invlido" -#: option.c:3113 +#: option.c:3184 #, fuzzy msgid "bad dhcp-proxy address" msgstr "direccin IP errnea" -#: option.c:3124 +#: option.c:3210 +#, fuzzy +msgid "Bad dhcp-relay" +msgstr "opcin dhcp-range (rango DHCP) errnea" + +#: option.c:3220 msgid "bad DUID" msgstr "" -#: option.c:3166 +#: option.c:3262 #, fuzzy msgid "invalid alias range" msgstr "rango alias invlido" -#: option.c:3205 +#: option.c:3305 msgid "bad CNAME" msgstr "CNAME errneo" -#: 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 errneo" -#: option.c:3261 +#: option.c:3361 #, fuzzy msgid "bad NAPTR record" msgstr "expediente NAPTR errneo" -#: option.c:3295 +#: option.c:3395 #, fuzzy msgid "bad RR record" msgstr "expediente PTR errneo" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "expediente TXT errneo" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "expediente SRV errneo" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "destino SRV errneo" -#: option.c:3386 +#: option.c:3486 msgid "invalid priority" msgstr "prioridad invlida" -#: option.c:3393 +#: option.c:3493 msgid "invalid weight" msgstr "peso invlido" -#: option.c:3417 +#: option.c:3517 #, fuzzy msgid "Bad host-record" msgstr "expediente PTR errneo" -#: option.c:3434 +#: option.c:3534 #, fuzzy msgid "Bad name in host-record" msgstr "nombre errneo en %s" -#: option.c:3464 +#: option.c:3564 msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DBus support)" msgstr "opcin 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 "opcin errnea" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "parmetro extrao" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "parmetro 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 lnea %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 versin %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 compilacin %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 trminos de la GNU General Public License, versin 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 lnea de comandos errneas: %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 exctamente 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 bsqueda 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 "revisin de sintaxis OK" @@ -1034,106 +1055,111 @@ msgstr "servidor DNS %s se reus msgid "possible DNS-rebind attack detected: %s" msgstr "posible ataque de revinculacin DNS detectado" -#: network.c:414 +#: forward.c:1216 +#, fuzzy, c-format +msgid "Maximum number of concurrent DNS queries reached (max: %d)" +msgstr "Nmero mximo de bsquedas DNS simultneas. (%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(va %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 asincrnico no est disponible bajo Solaris" -#: dnsmasq.c:149 +#: dnsmasq.c:152 #, fuzzy msgid "asychronous logging is not available under Android" msgstr "bitacoreo asincrnico 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 raz de sistema de archivos: %s" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, fuzzy, c-format msgid "started, version %s DNS disabled" msgstr "iniciado, versin %s DNS deshabilitado" -#: dnsmasq.c:599 +#: dnsmasq.c:600 #, c-format msgid "started, version %s cachesize %d" msgstr "iniciado, versin %s tamao de cach %d" -#: dnsmasq.c:601 +#: dnsmasq.c:602 #, c-format msgid "started, version %s cache disabled" msgstr "iniciado, versin %s cach deshabilitado" -#: dnsmasq.c:603 +#: dnsmasq.c:604 #, c-format msgid "compile time options: %s" msgstr "opciones de compilacin: %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: coneccin 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 dueo de %s: %s" -#: dnsmasq.c:620 +#: dnsmasq.c:621 msgid "setting --bind-interfaces option because of OS limitations" msgstr "fijando opcin --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 actulmente" -#: dnsmasq.c:630 +#: dnsmasq.c:631 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "advertencia: ignorando opcin resolv-file porque no-resolv est fijado" -#: dnsmasq.c:633 +#: dnsmasq.c:634 #, fuzzy msgid "warning: no upstream servers configured" msgstr "advertencia: ningn servidor upstream configurado" -#: dnsmasq.c:637 +#: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" msgstr "bitacoreo asincrnico habilitado, lmite 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 nmero mximo de transferencias TFTP simultneas 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 "configuracin 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 seal %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 "ningn 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 direccin" -#: 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 mscara de subred %s" -#: dhcp.c:832 +#: dhcp.c:806 #, fuzzy, c-format msgid "bad line at %s line %d" msgstr "lnea errnea en %s lnea %d" -#: dhcp.c:875 +#: dhcp.c:849 #, c-format msgid "ignoring %s line %d, duplicate name or IP address" msgstr "ignorando %s lnea %d, nombre o direccin 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 guin lease-init %s: %s" -#: lease.c:170 +#: lease.c:171 #, c-format msgid "lease-init script returned exit code %s" msgstr "archivo guin 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 "ningn rango de direccines 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 "va" -#: 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 "direccin en uso" - -#: rfc2131.c:452 rfc2131.c:1007 -msgid "no address available" -msgstr "ninguna direccin disponible" - -#: rfc2131.c:459 rfc2131.c:1154 -msgid "wrong network" -msgstr "red equivocada" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "ninguna direccin configurada" - -#: rfc2131.c:480 rfc2131.c:1204 -msgid "no leases left" -msgstr "no sobra ningn 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 "direccin en uso" + +#: rfc2131.c:564 rfc2131.c:1015 +msgid "no address available" +msgstr "ninguna direccin disponible" + +#: rfc2131.c:571 rfc2131.c:1162 +msgid "wrong network" +msgstr "red equivocada" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "ninguna direccin configurada" + +#: rfc2131.c:592 rfc2131.c:1212 +msgid "no leases left" +msgstr "no sobra ningn 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 direccin DHCP esttica %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 direccin 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 direccin 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 direccin configurada %s porque fu previamente denegada" -#: rfc2131.c:1005 rfc2131.c:1197 +#: rfc2131.c:1013 rfc2131.c:1205 msgid "no unique-id" msgstr "ningn unique-id (identificacin 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 "direccin 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 "direccin no disponible" -#: rfc2131.c:1173 +#: rfc2131.c:1181 msgid "static lease available" msgstr "arriendo esttico disponible" -#: rfc2131.c:1177 +#: rfc2131.c:1185 msgid "address reserved" msgstr "direccin 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 opcin 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 opcin RFC3925: demasiadas opciones para nmero 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 direccin de servidor IPv6 va 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 "ningn rango de direccines 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 "ningn rango de direccines 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 direccin disponible" -#: rfc3315.c:806 +#: rfc3315.c:855 #, fuzzy msgid "address unavailable" msgstr "direccin 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 "direccin 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 "direccin errnea en %s lnea %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 ms de una direccin 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 "direccin 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 estticos 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 estticos 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 trouve 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 entres non-expires rutilises" -#: cache.c:1165 +#: cache.c:1133 #, c-format msgid "queries forwarded %u, queries answered locally %u" msgstr "requtes transmises %u, requtes rsolues 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: requtes envoyes %u, requtes ressayes ou choues %u" @@ -78,557 +78,569 @@ msgstr "serveur %s#%d: requ msgid "failed to seed the random number generator: %s" msgstr "impossible d'initialiser le gnrateur de nombre alatoire : %s" -#: util.c:189 +#: util.c:192 msgid "failed to allocate memory" msgstr "impossible d'allouer la mmoire" -#: util.c:227 option.c:531 +#: util.c:230 option.c:540 msgid "could not get memory" msgstr "impossible d'allouer de la mmoire" -#: util.c:237 +#: util.c:240 #, c-format msgid "cannot create pipe: %s" msgstr "Ne peut pas crer 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 "Spcifie la ou les adresse(s) locales o le dmon 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 prsentes dans les domaines spcifis" -#: option.c:288 +#: option.c:294 msgid "Fake reverse lookups for RFC1918 private address ranges." msgstr "Traduction inverse truque pour la plage d'adresse prive 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 "Spcifie le nombre d'entres que contiendra le cache (par dfaut : %s)." -#: option.c:291 +#: option.c:297 #, c-format msgid "Specify configuration file (defaults to %s)." msgstr "Spcifie le nom du fichier de configuration (par dfaut : %s)" -#: option.c:292 +#: option.c:298 msgid "Do NOT fork into the background: run in debug mode." msgstr "Ne passe pas en tche de fond : dmarre en mode debug" -#: option.c:293 +#: option.c:299 msgid "Do NOT forward queries with no domain part." msgstr "Ne retransmet pas les requtes 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 requtes 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 donne sur la dure 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 aprs le dmarrage (par dfaut : %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 spcifie." -#: option.c:300 +#: option.c:306 msgid "Read DHCP host specs from file." msgstr "Lecture des spcifications d'htes 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 "Spcifie un nom de fichier hosts lire en complment de %s" -#: option.c:305 +#: option.c:311 msgid "Specify interface(s) to listen on." msgstr "Spcifie la ou les interface(s) o le dmon doit se mettre l'coute." -#: option.c:306 +#: option.c:312 msgid "Specify interface(s) NOT to listen on." msgstr "Spcifie la ou les interface(s) que le dmon 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 numeres dans les options." # -#: option.c:312 +#: option.c:318 msgid "Force broadcast replies for hosts with tag set." msgstr "Forcer les rponses par 'broadcast' pour les machines numeres 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 tche de fond, ne pas s'excuter en mode debug." -#: option.c:314 +#: option.c:320 msgid "Assume we are the only DHCP server on the local network." msgstr "On considre que l'on est le seul serveur DHCP sur le rseau local." -#: option.c:315 +#: option.c:321 #, c-format msgid "Specify where to store DHCP leases (defaults to %s)." msgstr "Spcifie o il faut sauvegarder les baux DHCP (par dfaut : %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 "Spcifie un champ MX." -#: option.c:318 +#: option.c:324 msgid "Specify BOOTP options to DHCP server." msgstr "Spcifie 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 rception du signal SIGHUP." -#: option.c:320 +#: option.c:326 msgid "Do NOT cache failed search results." msgstr "Ne place pas en cache le rsultat des requtes qui ont choues." -#: 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 supplmentaires 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 envoye mme 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 "Spcifie le port o il faut couter les requtes DNS (par dfaut : 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 supports pour EDNS.0 (par dfaut : %s)." # -#: option.c:326 +#: option.c:332 msgid "Log DNS queries." msgstr "Enregistre les requtes 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 requtes 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 "Spcifie le chemin pour le fichier resolv.conf (par dfaut : %s)." -#: option.c:330 +#: option.c:336 msgid "Specify address(es) of upstream servers with optional domains." msgstr "Spcifie 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 requtes pour les domaines spcifis." -#: option.c:332 +#: option.c:338 msgid "Specify the domain to be assigned in DHCP leases." msgstr "Spcifie le domaine qui doit etre assign aux baux DHCP." -#: option.c:333 +#: option.c:339 msgid "Specify default target in an MX record." msgstr "Spcifie la cible par dfaut dans un champ MX." -#: option.c:334 +#: option.c:340 msgid "Specify time-to-live in seconds for replies from /etc/hosts." msgstr "Spcifie le TTL en secondes pour les rponses qui utilisent /etc/hosts." # -#: option.c:335 +#: option.c:341 msgid "Specify time-to-live in seconds for negative caching." msgstr "Spcifie le TTL en secondes pour les rponses 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 "Spcifie, 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 aprs le dmarrage (par dfaut : %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 lies 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 "Spcifie 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 "Spcifie un chemin pour le fichier PID (par dfaut : %s)." -#: option.c:344 +#: option.c:350 #, c-format msgid "Specify maximum number of DHCP leases (defaults to %s)." msgstr "Spcifie le nombre maximum de baux DHCP (par dfaut : %s)." -#: option.c:345 +#: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." msgstr "Repond aux requtes DNS en se basant sur l'interface ou a t envoye la requte." -#: option.c:346 +#: option.c:352 msgid "Specify TXT DNS record." msgstr "Spcifie un champ DNS TXT" # -#: option.c:347 +#: option.c:353 msgid "Specify PTR DNS record." msgstr "Spcifie 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 rseau 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 requtes 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 vrification 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 excuter lors de la cration 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 excuter lors de la cration 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 rpertoire." # -#: 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. (dfaut : 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 "Spcifie le nombre maximum de requtes DHCP concurrentes (par dfaut : %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'htes 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 rutiliser les champs nom de fichier et serveur dans les options DHCP supplmentaires." -#: option.c:367 +#: option.c:373 msgid "Enable integrated read-only TFTP server." msgstr "Activer le server TFTP intgr (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 spcifie" -#: 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 "Accs 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 "Spcifie le nombre maximum de transfert TFTP concurrents (dfaut : %s)." -#: option.c:372 +#: option.c:378 msgid "Disable the TFTP blocksize extension." msgstr "Dsactivation 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 utiliss dans les transferts TFTP." -#: option.c:375 +#: option.c:381 msgid "Extra logging for DHCP." msgstr "Traces supplmentaires 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 rassociation DNS ('DNS rebinding'). Filtre les gammes d'adresses IP prives lors de la rsolution." -#: option.c:378 +#: option.c:384 msgid "Allow rebinding of 127.0.0.0/8, for RBL servers." msgstr "Autorise la rassociation 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 "Dsactive la protection contre les rassociation DNS pour ce domaine" -#: option.c:380 +#: option.c:386 msgid "Always perform DNS queries to all servers." msgstr "Toujours effectuer les requtes DNS tous les serveurs." # -#: option.c:381 +#: option.c:387 msgid "Set tag if client includes matching option in request." msgstr "Spcifie le label si le client inclus l'option dans la requte." -#: 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 "Spcifie un champ DNS NAPTR." -#: option.c:384 +#: option.c:390 msgid "Specify lowest port available for DNS query transmission." msgstr "Dfinie le plus petit port utilis pour la transmission d'une requte 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 qualifis pour les clients DHCP." -#: option.c:386 +#: option.c:392 msgid "Generate hostnames based on MAC address for nameless clients." msgstr "Gnre les noms d'htes 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 "Spcifie 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 dmarrage pour menu PXE." -#: option.c:391 +#: option.c:398 msgid "Check configuration syntax." msgstr "vrification 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 requteur aux requtes DNS transmises" -#: option.c:393 +#: option.c:400 msgid "Proxy DNSSEC validation results from upstream nameservers." msgstr "Copie dans la rponse DNS le rsultat de la validation DNSSEC effectue 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 squentielles 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 requtes 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 "Spcifie pour le serveur DHCPv6 un identifiant unique DHCP (DUID) bas sur un numro unique de vendeur (DUID_EN)" -#: option.c:399 +#: option.c:407 msgid "Specify host (A/AAAA and PTR) records" msgstr "Spcifie les enregistrements (A/AAAA et PTR) d'un hte." -#: option.c:400 +#: option.c:408 msgid "Specify arbitrary DNS resource record" msgstr "Dfinie une resource DNS d'un type spcifique" -#: option.c:401 +#: option.c:409 msgid "Bind to interfaces in use - check for new interfaces" msgstr "Se lie aux interfaces prexistantes - vrifie 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 dure de vie (Time To Live) pour les rponses 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 dlgus" -#: option.c:407 +#: option.c:415 msgid "Peers which are allowed to do zone transfer" msgstr "Pairs autoriss faire des transferts de zone" -#: option.c:408 +#: option.c:416 msgid "Specify ipsets to which matching domains should be added" msgstr "Spcifie les ipsets auxquels les domaines correspondants doivent-tre ajouts" -#: 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 "Spcifie le prfixe 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 "numro 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 supporte" # -#: 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 supporte 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 illgale pour 'dhcp-match'" -#: option.c:1298 +#: option.c:1314 msgid "illegal repeated flag" msgstr "Une option ne pouvant tre spcifi qu'une seule fois t donne plusieurs fois" -#: option.c:1306 +#: option.c:1322 msgid "illegal repeated keyword" msgstr "Mot-clef ne pouvant tre rpt" -#: 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 rpertoire %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 "prference 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 excuter de script sous uClinux" -#: option.c:1517 +#: option.c:1533 msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts" msgstr "recompiler en dfinissant HAVE_SCRIPT pour permettre l'excution 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 dfinissant HAVE_LUASCRIPT pour permettre l'excution de scripts LUA au changement de bail (lease-change)" -#: option.c:1631 +#: option.c:1739 option.c:1800 msgid "bad prefix" msgstr "mauvais prfixe" -#: option.c:2043 +#: option.c:2094 msgid "recompile with HAVE_IPSET defined to enable ipset directives" msgstr "recompiler en dfinissant 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 autorise" -#: 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 incohrente" -#: 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 prfixe doit tre exactement 64 pour les sous-rseaux 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 prfixe doit tre exactement 64 pour le constructeur de sous-rseaux" -#: 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 prfixe doit tre au minimum 64" -#: option.c:2412 +#: option.c:2468 msgid "inconsistent DHCPv6 range" msgstr "plage d'adresses DHCPv6 incohrente" -#: option.c:2519 option.c:2567 +#: option.c:2479 +#, fuzzy +msgid "prefix must be zero with \"constructor:\" argument" +msgstr "la taille du prfixe doit tre exactement 64 pour le constructeur de sous-rseaux" + +#: 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 prohibe dans --dhcp-host" -#: option.c:2589 +#: option.c:2660 #, c-format msgid "duplicate dhcp-host IP address %s" msgstr "adresse IP dhcp-host duplique dans %s." # -#: option.c:2645 +#: option.c:2716 msgid "bad DHCP host name" msgstr "nom d'hte 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 "numro 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 dja" # -#: 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 supporte (vrifier 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 "paramtre en trop" -#: option.c:3583 +#: option.c:3683 msgid "missing parameter" msgstr "paramtre 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 lments indsirables ou incomprhensibles" -#: 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 ncessaire pour y rcuperer 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 trouve dans %s" -#: option.c:4097 +#: option.c:4197 msgid "there must be a default domain when --dhcp-fqdn is set" msgstr "un domaine par dfaut doit tre spcifi lorsque l'option --dhcp-fqdn est utilise" -#: option.c:4101 +#: option.c:4201 msgid "syntax check OK" msgstr "vrification de syntaxe OK" @@ -1013,103 +1038,108 @@ msgstr "le serveur de nom %s a refus msgid "possible DNS-rebind attack detected: %s" msgstr "dtection 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 "Spcifie le nombre maximum de requtes DHCP concurrentes (par dfaut : %s)." + +#: network.c:551 #, c-format msgid "failed to create listening socket for %s: %s" msgstr "impossible de crer 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 "dfaut" -#: 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 numro de srie 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 systme de fichier : %s" -#: dnsmasq.c:597 +#: dnsmasq.c:598 #, c-format msgid "started, version %s DNS disabled" msgstr "dmarrage avec le DNS dsactiv (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 "dmarrage avec le cache dsactiv (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 systme" -#: 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 systme 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 ignore car no-resolv a t spcifi" # -#: 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 actives" -#: 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 scuris" -#: dnsmasq.c:697 +#: dnsmasq.c:704 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "le nombre maximum de transferts TFTP simultans 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 tche de fond : %s" -#: dnsmasq.c:1010 +#: dnsmasq.c:1020 #, c-format msgid "failed to create helper: %s" msgstr "impossible de crer 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 "rpertoire 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'excuter %s : %s" -#: dnsmasq.c:1148 +#: dnsmasq.c:1158 msgid "exiting on receipt of SIGTERM" msgstr "sortie sur rception du signal SIGTERM" -#: dnsmasq.c:1176 +#: dnsmasq.c:1186 #, c-format msgid "failed to access %s: %s" msgstr "impossible d'accder %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 ressayer" -#: dhcp.c:49 +#: dhcp.c:53 #, c-format msgid "cannot create DHCP socket: %s" msgstr "ne peut crer 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 dclarer 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 crer 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 spcifie 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 reu 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 cohrente avec le masque de rseau %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 crer le fichiers de baux %s : %s" -#: lease.c:133 +#: lease.c:134 msgid "too many stored leases" msgstr "beaucoup trop de baux enregistrs" -#: lease.c:164 +#: lease.c:165 #, c-format msgid "cannot run lease-init script %s: %s" msgstr "Ne peut pas excuter 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'hte 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 requte DHCP %s %s" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "with subnet selector" msgstr "avec slecteur de sous-reseau" -#: rfc2131.c:338 +#: rfc2131.c:339 msgid "via" msgstr "par l'intermdiaire de" -#: rfc2131.c:350 +#: rfc2131.c:351 #, c-format msgid "%u available DHCP subnet: %s/%s" msgstr "%u sous-rseaux 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 "dsactiv" - -#: 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 dj utilise" - -#: 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 rseau" - -#: rfc2131.c:474 -msgid "no address configured" -msgstr "pas d'adresse configure" - -#: 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 "dsactiv" + +#: 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 dj utilise" + +#: 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 rseau" + +#: rfc2131.c:586 +msgid "no address configured" +msgstr "pas d'adresse configure" + +#: 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 "dsactive 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 utilise car un bail est dj 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 utilise car elle est utilise 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 utilise car elle a pralablement t refuse" -#: 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 reserve" -#: 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 rponse 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 demandes : %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 numro 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 crer 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 "requte DHCP pour un type de matriel non support (%d) reue 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 "requte de %s non supporte" -#: 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 reu 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 rcupration 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 crer 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 dclarer 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 requte 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 requte DHCPv6 via %s" -#: rfc3315.c:269 +#: rfc3315.c:289 #, c-format msgid "%u available DHCPv6 subnet: %s/%d" msgstr "%u sous-rseaux 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 "prfixe de classe inconnu %d" -#: rfc3315.c:741 rfc3315.c:854 +#: rfc3315.c:781 rfc3315.c:903 msgid "success" msgstr "russi" -#: 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 trouve" -#: rfc3315.c:948 +#: rfc3315.c:1001 msgid "deprecated" msgstr "obsolte" -#: 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 "libration reue" +#: 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 ignore" -#: 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'hte, 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) duplique 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 dclarer 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 ", prfixe obsolte" -#: dhcp-common.c:696 +#: dhcp-common.c:817 #, c-format msgid ", lease time " msgstr ", dure 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-rseau %.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 drivs 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 crer la socket ICMPv6: %s" -#: auth.c:402 +#: auth.c:435 #, c-format msgid "ignoring zone transfer request from %s" msgstr "la requte de transfert de zone en provenance de %s est ignore" -#: 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 crer une socket de contrle 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 "drlig 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 "drlig 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 tmt" -#: 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 strrelse %d, %d/%d mellomlager innsettinger re-bruker mellomlager plasser som ikke er utlpt" -#: 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 omrder." -#: option.c:289 +#: option.c:295 msgid "Treat ipaddr as NXDOMAIN (defeats Verisign wildcard)." msgstr "Behandle ipaddr som NXDOMAIN (omgr Verisign wildcard)." -#: option.c:290 +#: option.c:296 #, c-format msgid "Specify the size of the cache in entries (defaults to %s)." msgstr "Spesifiser strrelsen 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: kjr 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 foresprsler 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 omrdet 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 "drlig 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 utfr DHCP for klienter i opsjon sett." -#: option.c:312 +#: option.c:318 #, fuzzy msgid "Force broadcast replies for hosts with tag set." msgstr "Ikke utfr 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 kjr 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 spr (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 skeresultater 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 rekkeflgen 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 stttet UDP pakkestrrelse 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 oppstrms 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 oppstrms 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 ml 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 oppstrms 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 oppstrms 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 oppstrms 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 "drlig 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 "drlig 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 "drlig 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 "drlig 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 "drlig MX preferanse" -#: option.c:1489 +#: option.c:1505 msgid "bad MX name" msgstr "drlig MX navn" -#: option.c:1503 +#: option.c:1519 msgid "bad MX target" msgstr "drlig MX ml" -#: 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 "drlig 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 "drlig 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 "drlig dhcp-omrde" -#: option.c:2344 +#: option.c:2397 msgid "inconsistent DHCP range" msgstr "ikke konsistent DHCP omrde" -#: 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 omrde" -#: 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 "drlig 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 "drlig MX navn" -#: option.c:2727 +#: option.c:2798 #, fuzzy msgid "bad tag-if" msgstr "drlig MX ml" -#: 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 "drlig dhcp-omrde" + +#: 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 "drlig SRV post" -#: option.c:3261 +#: option.c:3361 #, fuzzy msgid "bad NAPTR record" msgstr "drlig SRV post" -#: option.c:3295 +#: option.c:3395 #, fuzzy msgid "bad RR record" msgstr "drlig SRV post" -#: option.c:3324 +#: option.c:3424 msgid "bad TXT record" msgstr "drlig TXT post" -#: option.c:3365 +#: option.c:3465 msgid "bad SRV record" msgstr "drlig SRV post" -#: option.c:3372 +#: option.c:3472 msgid "bad SRV target" msgstr "drlig SRV ml" -#: 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 "drlig SRV post" -#: option.c:3434 +#: option.c:3534 #, fuzzy msgid "Bad name in host-record" msgstr "drlig 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 "drlig opsjon" -#: option.c:3581 +#: option.c:3681 msgid "extraneous parameter" msgstr "overfldig 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 vilkrene 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 "drlige 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 nyaktig 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 ske 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 strrelse %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 sttte aktivert: koblet til system buss" -#: dnsmasq.c:611 +#: dnsmasq.c:612 msgid "DBus support enabled: bus connection pending" msgstr "DBus sttte 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 oppstrms 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 ske 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 omrde %s -- %s er ikke konsistent med nettmaske %s" -#: dhcp.c:832 +#: dhcp.c:806 #, c-format msgid "bad line at %s line %d" msgstr "drlig 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 omrde 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 omrde 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 "forsk p sette en IPv6 tjener adresse via DBus - ingen IPv6 sttte" -#: dbus.c:308 dbus.c:504 +#: dbus.c:523 msgid "setting upstream servers from DBus" msgstr "setter oppstrms tjener fra DBus" -#: dbus.c:561 +#: dbus.c:570 msgid "could not register a DBus message handler" msgstr "kunne ikke registrere en DBus meldingshndterer" -#: 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 stttet 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 omrde 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 omrde 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 omrde 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 "drlig 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 omrde %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 concesin 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 direccin %s" +msgstr "no otorgando nombre %s a concesin DHCP de %s porque el nombre existe en %s con direccin %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 duracin del arriendo." +msgstr "Habilitar DHCP dentro del rango brindado con duracin de concesin." #: 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 concesin 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 bsquedas DNS upstream." +msgstr "Enforzar el puerto original para bsquedas 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 direccin(es) de servidores upstream con dominios opcionales." +msgstr "Especificar direccin(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 concesin 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 nmero mximo de arriendos DHCP (%s por predeterminado)." +msgstr "Especificar nmero mximo de concesin DHCP (%s por predeterminado)." #: option.c:351 msgid "Answer DNS queries based on the interface a query was sent to." -msgstr "Responder a bsquedas DNS en base a la interface a la cul fueron enviadas." +msgstr "Responder a bsquedas DNS en base a la interfase a la cul 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 direccin IPv4 de interface." +msgstr "Otorgar nombre DNS a direccin 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, slo proveer DNS." +msgstr "No proveer DHCP en esta interfase, slo 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 guin para ejecutar cuando se crea o destruye un arriendo DHCP." +msgstr "Archivo guin para ejecutar cuando se crea o destruye una concesin DHCP." #: option.c:364 #, fuzzy msgid "Lua script to run on DHCP lease creation and destruction." -msgstr "Archivo guin para ejecutar cuando se crea o destruye un arriendo DHCP." +msgstr "Archivo guin para ejecutar cuando se crea o destruye una concesin DHCP." #: option.c:365 #, fuzzy msgid "Run lease-change scripts as this user." -msgstr "Correr archivo guin de cambio de arriendos como este usuario." +msgstr "Correr archivo guin de cambio de concesin 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 concesin." #: 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 minsculas los nombres de archivos TFTP" #: option.c:380 msgid "Ephemeral port range for use by TFTP transfers." -msgstr "Rango de puertos efmeros para ser usados por transferencias TFTP." +msgstr "Rango de puertos efmeros 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 asincrnico; opcionalmente fijar tamao de cola." +msgstr "Habilitar registro asncrono; opcionalmente fijar tamao 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 "Aadir 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 informacin 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 debran ser aadidos" #: option.c:417 msgid "Specify a domain and address range for sythesised names" -msgstr "" +msgstr "Especificar dominio y rango de direcciones para los nombres acrnimos" #: 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 "vinculacin de interface no est soportado" +msgstr "vinculacin de interfase no est soportado" #: option.c:699 option.c:3275 #, fuzzy msgid "bad interface name" -msgstr "nombre de interface errneo" +msgstr "nombre de interfase errneo" #: option.c:729 #, fuzzy @@ -692,7 +692,7 @@ msgstr "direcci #: option.c:863 msgid "unsupported encapsulation for IPv6 option" -msgstr "" +msgstr "Encapsulacin no soportada para opcin 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 creacin de un registro no es posible en Android" #: option.c:1451 msgid "bad log facility" -msgstr "" +msgstr "ubicacin del registro errnea" #: 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 guines 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 guines de cambio de arriendo" +msgstr "recompilar con HAVE_SCRIPT definido para habilitar guines de cambio de concesin" #: option.c:1537 #, fuzzy msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts" -msgstr "recompilar con HAVE_SCRIPT definido para habilitar guines 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 errneo" +msgstr "prefijo errneo" #: option.c:2094 #, fuzzy msgid "recompile with HAVE_IPSET defined to enable ipset directives" -msgstr "recompilar con HAVE_SCRIPT definido para habilitar guines 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 "opcin bridge-interface (interface puente) errnea" +msgstr "opcin bridge-interface (interfase puente) errnea" #: 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 "opcin dhcp-host errnea" +msgstr "constante hexadecimal errnea" #: 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 errneo" +msgstr "etiqueta tag-if errnea" #: 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 errneo" #: option.c:3262 #, fuzzy @@ -881,25 +881,25 @@ msgstr "CNAME duplicado" #: option.c:3330 #, fuzzy msgid "bad PTR record" -msgstr "expediente PTR errneo" +msgstr "registro PTR errneo" #: option.c:3361 #, fuzzy msgid "bad NAPTR record" -msgstr "expediente NAPTR errneo" +msgstr "registro NAPTR errneo" #: option.c:3395 #, fuzzy msgid "bad RR record" -msgstr "expediente PTR errneo" +msgstr "registro PTR errneo" #: option.c:3424 msgid "bad TXT record" -msgstr "expediente TXT errneo" +msgstr "registro TXT errneo" #: option.c:3465 msgid "bad SRV record" -msgstr "expediente SRV errneo" +msgstr "registro SRV errneo" #: 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 errneo" +msgstr "registro PTR errneo" #: 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 versin %s %s\n" +msgstr "Versin 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 bsqueda recursiva" +msgstr "servidor DNS %s rechaz realizar una bsqueda 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 "Nmero mximo de bsquedas DNS simultneas. (%s por predeterminado)" +msgstr "Nmero mximo de bsquedas DNS simultneas 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 zcalo 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 zcalo 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 zcalo: %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 estndar %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(va %s)" +msgstr "usando nombre de servidor %s#%d(va %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 asincrnico no est disponible bajo Solaris" +msgstr "registro asncrono no est disponible bajo Solaris" #: dnsmasq.c:152 #, fuzzy msgid "asychronous logging is not available under Android" -msgstr "bitacoreo asincrnico no est disponible bajo Solaris" +msgstr "registro asncrono 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: coneccin a bus pendiente" +msgstr "soporte DBus habilitado: conexin a bus pendiente" #: dnsmasq.c:617 #, fuzzy, c-format msgid "warning: failed to change owner of %s: %s" -msgstr "advertencia: no se pudo cambiar dueo 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 opcin --bind-interfaces debido a limitaciones de sistema operativo" +msgstr "fijando opcin --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 actulmente" +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: ningn servidor upstream configurado" +msgstr "advertencia: ningn servidor de subida configurado" #: dnsmasq.c:638 #, c-format msgid "asynchronous logging enabled, queue limit is %d messages" -msgstr "bitacoreo asincrnico habilitado, lmite de cola es %d mensajes" +msgstr "registro asncrono habilitado, el lmite 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 seal %d" +msgstr "proceso script eliminado por seal %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 zcalo 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 zcalo 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 zcalo 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 zcalo 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 zcalo 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 lnea %d, nombre o direccin 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 concesin %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 guin 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 guin lease-init retorn exit code %s" +msgstr "archivo guin lease-init retorn cdigo 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 "direccin en uso" @@ -1501,9 +1501,9 @@ msgstr "ninguna direcci #: rfc2131.c:592 rfc2131.c:1212 msgid "no leases left" -msgstr "no sobra ningn arriendo" +msgstr "no sobra ninguna concesin" -#: 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 direccin DHCP esttica %s para %s" #: rfc2131.c:952 msgid "unknown lease" -msgstr "arriendo desconocido" +msgstr "concesin desconocida" #: rfc2131.c:984 #, c-format msgid "not using configured address %s because it is leased to %s" -msgstr "no usando direccin configurada %s porque est arrendada a %s" +msgstr "no usando direccin 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 "direccin equivocada" -#: rfc2131.c:1137 rfc3315.c:959 +#: rfc2131.c:1137 rfc3315.c:964 msgid "lease not found" -msgstr "arriendo no encontrado" +msgstr "concesin no encontrada" #: rfc2131.c:1170 msgid "address not available" @@ -1558,7 +1558,7 @@ msgstr "direcci #: rfc2131.c:1181 msgid "static lease available" -msgstr "arriendo esttico disponible" +msgstr "concesin esttica 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 concesin 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 opcin DHCP/BOOTP %d: no queda espacio en paquete" +msgstr "no se puede enviar opcin 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 zcalo 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 zcalo 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 funcin 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 bitcora perdidas" +msgstr "desbordamiento: %d entradas de registro perdidas" #: log.c:268 #, c-format msgid "log failed: %s" -msgstr "bitcora 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 "Conexin conntrack con marca recuperacin 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 zcalo 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 zcalo 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 zcalo 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 "ningn rango de direccines 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 "ningn rango de direccines 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 direccin disponible" -#: rfc3315.c:855 +#: rfc3315.c:860 #, fuzzy msgid "address unavailable" msgstr "direccin 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 "direccin en uso" -#: rfc3315.c:1048 +#: rfc3315.c:1053 msgid "confirm failed" -msgstr "" +msgstr "confirmacin fall" -#: rfc3315.c:1059 +#: rfc3315.c:1064 #, fuzzy msgid "all addresses still on link" msgstr "direccin errnea en %s lnea %d" -#: rfc3315.c:1147 +#: rfc3315.c:1152 msgid "release received" -msgstr "" +msgstr "concesin 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 opcin 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 concesin" -#: dhcp-common.c:849 +#: dhcp-common.c:859 #, c-format msgid "%s stateless on %s%.0s%.0s%s" -msgstr "" +msgstr "%s aptrida 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 estticos solo en %.0s%s, tiempo de arriendo %s" +msgstr "DHCP, concesin esttica solo en %.0s%s, tiempo de concesin %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 concesin %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 estticos solo en %.0s%s, tiempo de arriendo %s" +msgstr "DHCP, concesin estticos solo en %.0s%s, tiempo de concesin %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 direccin %s" +#~ msgstr "ninguna interfase con direccin %s" #~ msgid "duplicate IP address %s in dhcp-config directive." #~ msgstr "direccin IP duplicada %s en directiva dhcp-config." @@ -1923,10 +1923,10 @@ msgstr "no se pudo crear socket TFTP: %s" #~ msgstr "paquete DHCP: transaction-id (identificacin de transaccin) es %u" #~ msgid "must set exactly one interface on broken systems without IP_RECVIF" -#~ msgstr "debe fijarse exctamente una interface en sistemas rotos sin IP_RECVIF" +#~ msgstr "debe fijarse exctamente 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 concesin 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 "integracin 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 concesin al inicio, pero nunca escribir el archivo de concesin." #, fuzzy #~ msgid "read %s - %d hosts" #~ msgstr "direccines %s - %d ledas" #~ msgid "Limit of %d leases exceeded." -#~ msgstr "Lmite de %d arriendos excedido." +#~ msgstr "Lmite de %d concesin 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: