]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
import of dnsmasq-2.47.tar.gz
authorSimon Kelley <simon@thekelleys.org.uk>
Thu, 5 Feb 2009 20:28:08 +0000 (20:28 +0000)
committerSimon Kelley <simon@thekelleys.org.uk>
Thu, 5 Jan 2012 17:31:14 +0000 (17:31 +0000)
37 files changed:
CHANGELOG
Makefile
contrib/lease-access/README [new file with mode: 0644]
contrib/lease-access/lease.access.patch [new file with mode: 0644]
dbus/dnsmasq.conf
dnsmasq.conf.example
doc.html
man/dnsmasq.8
man/fr/dnsmasq.8
po/de.po
po/es.po
po/fi.po
po/fr.po
po/id.po
po/it.po
po/no.po
po/pl.po
po/pt_BR.po
po/ro.po
src/bpf.c
src/cache.c
src/config.h
src/dbus.c
src/dhcp.c
src/dnsmasq.c
src/dnsmasq.h
src/forward.c
src/helper.c
src/lease.c
src/log.c
src/netlink.c
src/network.c
src/option.c
src/rfc1035.c
src/rfc2131.c
src/tftp.c
src/util.c

index 55e71c91a4de8683b8d3785e14b9e355d8541f79..69762ae717b4956f32c6e761e589344e3763a74a 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2638,11 +2638,11 @@ version 2.46
            Tighten up data-checking code for DNS packet
            handling. Thanks to Steve Dodd who found certain illegal
            packets which could crash dnsmasq. No memory overwrite was
-           possible, so this is not a security issue beond the DoS
+           possible, so this is not a security issue beyond the DoS
            potential.  
 
            Update example config dhcp option 47, the previous
-           suggestion generated and illegal, zero-length,
+           suggestion generated an illegal, zero-length,
            option. Thanks to Matthias Andree for finding this.
 
            Rewrite hosts-file reading code to remove the limit of
@@ -2692,3 +2692,91 @@ version 2.46
            Force re-reading of /etc/resolv.conf when an "interface
            up" event occurs.
 
+
+version 2.47
+           Updated French translation. Thanks to Gildas Le Nadan.
+
+           Fixed interface enumeration code to work on NetBSD
+           5.0. Thanks to Roy Marples for the patch. 
+
+           Updated config.h to use the same location for the lease
+           file on NetBSD as the other *BSD variants. Also allow
+           LEASEFILE and CONFFILE symbols to be overriden in CFLAGS.  
+
+            Handle duplicate address detection on IPv6 more
+            intelligently. In IPv6, an interface can have an address
+            which is not usable, because it is still undergoing DAD
+            (such addresses are marked "tentative"). Attempting to
+            bind to an address in this state returns an error,
+            EADDRNOTAVAIL. Previously, on getting such an error,
+            dnsmasq would silently abandon the address, and never
+            listen on it. Now, it retries once per second for 20
+            seconds before generating a fatal error. 20 seconds should
+            be long enough for any DAD process to complete, but can be
+            adjusted in src/config.h if necessary. Thanks to Martin
+            Krafft for the bug report.
+
+           Add DBus introspection. Patch from Jeremy Laine.
+
+           Update Dbus configuration file. Patch from Colin Walters.
+           Fix for this bug:
+            http://bugs.freedesktop.org/show_bug.cgi?id=18961
+
+           Support arbitrarily encapsulated DHCP options, suggestion
+           and initial patch from Samium Gromoff. This is useful for
+           (eg) gPXE, which expect all its private options to be
+           encapsulated inside a single option 175. So, eg, 
+
+            dhcp-option = encap:175, 190, "iscsi-client0"
+            dhcp-option = encap:175, 191, "iscsi-client0-secret"
+           
+           will provide iSCSI parameters to gPXE.
+
+           Enhance --dhcp-match to allow testing of the contents of a
+           client-sent option, as well as its presence. This
+           application in mind for this is RFC 4578
+           client-architecture specifiers, but it's generally useful.
+           Joey Korkames suggested the enhancement. 
+
+           Move from using the IP_XMIT_IF ioctl to IP_BOUND_IF on
+           OpenSolaris. Thanks to Bastian Machek for the heads-up.
+
+           No longer complain about blank lines in
+           /etc/ethers. Thanks to Jon Nelson for the patch.
+
+           Fix binding of servers to physical devices, eg
+           --server=/domain/1.2.3.4@eth0 which was broken from 2.43
+           onwards unless --query-port=0 set. Thanks to Peter Naulls
+           for the bug report.
+
+           Reply to DHCPINFORM requests even when the supplied ciaddr
+           doesn't fall in any dhcp-range. In this case it's not
+           possible to supply a complete configuration, but
+           individually-configured options (eg PAC) may be useful.
+
+           Allow the source address of an alias to be a range:
+           --alias=192.168.0.0,10.0.0.0,255.255.255.0 maps the whole
+           subnet 192.168.0.0->192.168.0.255 to 10.0.0.0->10.0.0.255,
+           as before.
+           --alias=192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0
+           maps only the 192.168.0.10->192.168.0.40 region. Thanks to
+           Ib Uhrskov for the suggestion.
+
+           Don't dynamically allocate DHCP addresses which may break
+           Windows.  Addresses which end in .255 or .0 are broken in
+           Windows even when using supernetting.
+           --dhcp-range=192.168.0.1,192.168.1.254,255,255,254.0 means 
+           192.168.0.255 is a valid IP address, but not for Windows. 
+           See Microsoft KB281579. We therefore no longer allocate 
+           these addresses to avoid hard-to-diagnose problems. 
+
+           Update Polish translation. Thanks to Jan Psota.
+
+           Delete the PID-file when dnsmasq shuts down. Note that by
+           this time, dnsmasq is normally not running as root, so
+           this will fail if the PID-file is stored in a root-owned
+           directory; such failure is silently ignored. To take
+           advantage of this feature, the PID-file must be stored in a
+           directory owned and write-able by the user running
+           dnsmasq.
+           
index 6490efbbccfc712ed3ccab466ff8e36c02ebfcd9..66de5bd30ee0a9098d194ae4ec319f1b836cc04a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+# dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 #
 #  This program is free software; you can redistribute it and/or modify
 #  it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 #  GNU General Public License for more details.
 #    
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#  You should have received a copy of the GNU General Public License
+#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 PREFIX = /usr/local
 BINDIR = ${PREFIX}/sbin
diff --git a/contrib/lease-access/README b/contrib/lease-access/README
new file mode 100644 (file)
index 0000000..fc66bdf
--- /dev/null
@@ -0,0 +1,20 @@
+Hello,
+
+For some specific application I needed to deny access to a MAC address
+to a lease. For this reason I modified the dhcp-script behavior and is
+called with an extra parameter "access" once a dhcp request or discover
+is received. In that case if the exit code of the script is zero,
+dnsmasq continues normally, and if non-zero the packet is ignored.
+
+This was not added as a security feature but as a mean to handle
+differently some addresses. It is also quite intrusive since it requires
+changes in several other subsystems.
+
+It attach the patch in case someone is interested.
+
+regards,
+Nikos
+
+nmav@gennetsa.com
+
+
diff --git a/contrib/lease-access/lease.access.patch b/contrib/lease-access/lease.access.patch
new file mode 100644 (file)
index 0000000..ad76e25
--- /dev/null
@@ -0,0 +1,578 @@
+Index: src/dnsmasq.c
+===================================================================
+--- src/dnsmasq.c      (revision 696)
++++ src/dnsmasq.c      (revision 821)
+@@ -59,7 +59,6 @@
+ static int set_dns_listeners(time_t now, fd_set *set, int *maxfdp);
+ static void check_dns_listeners(fd_set *set, time_t now);
+ static void sig_handler(int sig);
+-static void async_event(int pipe, time_t now);
+ static void fatal_event(struct event_desc *ev);
+ static void poll_resolv(void);
+@@ -275,7 +274,7 @@
+   piperead = pipefd[0];
+   pipewrite = pipefd[1];
+   /* prime the pipe to load stuff first time. */
+-  send_event(pipewrite, EVENT_RELOAD, 0); 
++  send_event(pipewrite, EVENT_RELOAD, 0, 0); 
+   err_pipe[1] = -1;
+   
+@@ -340,7 +339,7 @@
+           }
+         else if (getuid() == 0)
+           {
+-            send_event(err_pipe[1], EVENT_PIDFILE, errno);
++            send_event(err_pipe[1], EVENT_PIDFILE, errno, 0);
+             _exit(0);
+           }
+       }
+@@ -372,7 +371,7 @@
+         (setgroups(0, &dummy) == -1 ||
+          setgid(gp->gr_gid) == -1))
+       {
+-        send_event(err_pipe[1], EVENT_GROUP_ERR, errno);
++        send_event(err_pipe[1], EVENT_GROUP_ERR, errno, 0);
+         _exit(0);
+       }
+   
+@@ -415,14 +414,14 @@
+         if (bad_capabilities != 0)
+           {
+-            send_event(err_pipe[1], EVENT_CAP_ERR, bad_capabilities);
++            send_event(err_pipe[1], EVENT_CAP_ERR, bad_capabilities, 0);
+             _exit(0);
+           }
+         
+         /* finally drop root */
+         if (setuid(ent_pw->pw_uid) == -1)
+           {
+-            send_event(err_pipe[1], EVENT_USER_ERR, errno);
++            send_event(err_pipe[1], EVENT_USER_ERR, errno, 0);
+             _exit(0);
+           }     
+@@ -434,7 +433,7 @@
+         /* lose the setuid and setgid capbilities */
+         if (capset(hdr, data) == -1)
+           {
+-            send_event(err_pipe[1], EVENT_CAP_ERR, errno);
++            send_event(err_pipe[1], EVENT_CAP_ERR, errno, 0);
+             _exit(0);
+           }
+ #endif
+@@ -647,7 +646,7 @@
+       }
+       
+       if (FD_ISSET(piperead, &rset))
+-      async_event(piperead, now);
++      async_event(piperead, now, NULL, 0);
+       
+ #ifdef HAVE_LINUX_NETWORK
+       if (FD_ISSET(daemon->netlinkfd, &rset))
+@@ -674,7 +673,7 @@
+ #endif      
+       if (daemon->dhcp && FD_ISSET(daemon->dhcpfd, &rset))
+-      dhcp_packet(now);
++      dhcp_packet(piperead, now);
+ #ifndef NO_FORK
+       if (daemon->helperfd != -1 && FD_ISSET(daemon->helperfd, &wset))
+@@ -719,17 +718,18 @@
+       else
+       return;
+-      send_event(pipewrite, event, 0); 
++      send_event(pipewrite, event, 0, 0); 
+       errno = errsave;
+     }
+ }
+-void send_event(int fd, int event, int data)
++void send_event(int fd, int event, int data, int priv)
+ {
+   struct event_desc ev;
+   
+   ev.event = event;
+   ev.data = data;
++  ev.priv = priv;
+   
+   /* error pipe, debug mode. */
+   if (fd == -1)
+@@ -771,14 +771,17 @@
+       die(_("cannot open %s: %s"), daemon->log_file ? daemon->log_file : "log", EC_FILE);
+     }
+ }     
+-      
+-static void async_event(int pipe, time_t now)
++
++/* returns the private data of the event
++ */
++int async_event(int pipe, time_t now, struct event_desc* event, unsigned int secs)
+ {
+   pid_t p;
+   struct event_desc ev;
+   int i;
+-  if (read_write(pipe, (unsigned char *)&ev, sizeof(ev), 1))
++  if (read_timeout(pipe, (unsigned char *)&ev, sizeof(ev), now, secs) > 0) 
++    {
+     switch (ev.event)
+       {
+       case EVENT_RELOAD:
+@@ -872,6 +875,14 @@
+       flush_log();
+       exit(EC_GOOD);
+       }
++    }
++  else
++    return -1; /* timeout */
++
++  if (event)
++    memcpy( event, &ev, sizeof(ev));
++    
++  return 0;
+ }
+ static void poll_resolv()
+Index: src/config.h
+===================================================================
+--- src/config.h       (revision 696)
++++ src/config.h       (revision 821)
+@@ -51,6 +51,8 @@
+ #define TFTP_MAX_CONNECTIONS 50 /* max simultaneous connections */
+ #define LOG_MAX 5 /* log-queue length */
+ #define RANDFILE "/dev/urandom"
++#define SCRIPT_TIMEOUT 6
++#define LEASE_CHECK_TIMEOUT 10
+ /* DBUS interface specifics */
+ #define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq"
+Index: src/dnsmasq.h
+===================================================================
+--- src/dnsmasq.h      (revision 696)
++++ src/dnsmasq.h      (revision 821)
+@@ -116,6 +116,7 @@
+ /* Async event queue */
+ struct event_desc {
+   int event, data;
++  unsigned int priv;
+ };
+ #define EVENT_RELOAD    1
+@@ -390,6 +391,7 @@
+ #define ACTION_OLD_HOSTNAME  2
+ #define ACTION_OLD           3
+ #define ACTION_ADD           4
++#define ACTION_ACCESS        5
+ #define DHCP_CHADDR_MAX 16
+@@ -709,6 +711,7 @@
+ char *print_mac(char *buff, unsigned char *mac, int len);
+ void bump_maxfd(int fd, int *max);
+ int read_write(int fd, unsigned char *packet, int size, int rw);
++int read_timeout(int fd, unsigned char *packet, int size, time_t now, int secs);
+ /* log.c */
+ void die(char *message, char *arg1, int exit_code);
+@@ -748,7 +751,7 @@
+ /* dhcp.c */
+ void dhcp_init(void);
+-void dhcp_packet(time_t now);
++void dhcp_packet(int piperead, time_t now);
+ struct dhcp_context *address_available(struct dhcp_context *context, 
+                                      struct in_addr addr,
+@@ -792,14 +795,16 @@
+ void rerun_scripts(void);
+ /* rfc2131.c */
+-size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
++size_t dhcp_reply(int pipefd, struct dhcp_context *context, char *iface_name, int int_index,
+                 size_t sz, time_t now, int unicast_dest, int *is_inform);
+ /* dnsmasq.c */
+ int make_icmp_sock(void);
+ int icmp_ping(struct in_addr addr);
+-void send_event(int fd, int event, int data);
++void send_event(int fd, int event, int data, int priv);
+ void clear_cache_and_reload(time_t now);
++int wait_for_child(int pipe);
++int async_event(int pipe, time_t now, struct event_desc*, unsigned int timeout);
+ /* isc.c */
+ #ifdef HAVE_ISC_READER
+@@ -832,9 +837,9 @@
+ /* helper.c */
+ #ifndef NO_FORK
+ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd);
+-void helper_write(void);
++int helper_write(void);
+ void queue_script(int action, struct dhcp_lease *lease, 
+-                char *hostname, time_t now);
++                char *hostname, time_t now, unsigned int uid);
+ int helper_buf_empty(void);
+ #endif
+Index: src/util.c
+===================================================================
+--- src/util.c (revision 696)
++++ src/util.c (revision 821)
+@@ -444,3 +444,38 @@
+   return 1;
+ }
++int read_timeout(int fd, unsigned char *packet, int size, time_t now, int secs)
++{
++  ssize_t n, done;
++  time_t expire;
++  
++  expire = now + secs;
++  
++  for (done = 0; done < size; done += n)
++    {
++    retry:
++      if (secs > 0) alarm(secs);
++      n = read(fd, &packet[done], (size_t)(size - done));
++
++      if (n == 0)
++        return 0;
++      else if (n == -1)
++        {
++          if (errno == EINTR) {
++            my_syslog(LOG_INFO, _("read timed out (errno %d)"), errno);
++            return 0;
++          }
++
++          if (retry_send() || errno == ENOMEM || errno == ENOBUFS || errno == EAGAIN)
++            {
++              if (secs == 0 || (secs > 0 && dnsmasq_time() < expire))
++                goto retry;
++            }
++
++          my_syslog(LOG_INFO, _("error in read (timeout %d, errno %d)"), secs, errno);
++          return 0;
++        }
++    }
++  return 1;
++}
++
+Index: src/dhcp.c
+===================================================================
+--- src/dhcp.c (revision 696)
++++ src/dhcp.c (revision 821)
+@@ -103,7 +103,7 @@
+   daemon->dhcp_packet.iov_base = safe_malloc(daemon->dhcp_packet.iov_len);
+ }
+   
+-void dhcp_packet(time_t now)
++void dhcp_packet(int piperead, time_t now)
+ {
+   struct dhcp_packet *mess;
+   struct dhcp_context *context;
+@@ -239,7 +239,8 @@
+   if (!iface_enumerate(&parm, complete_context, NULL))
+     return;
+   lease_prune(NULL, now); /* lose any expired leases */
+-  iov.iov_len = dhcp_reply(parm.current, ifr.ifr_name, iface_index, (size_t)sz, 
++
++  iov.iov_len = dhcp_reply(piperead, parm.current, ifr.ifr_name, iface_index, (size_t)sz, 
+                          now, unicast_dest, &is_inform);
+   lease_update_file(now);
+   lease_update_dns();
+Index: src/helper.c
+===================================================================
+--- src/helper.c       (revision 696)
++++ src/helper.c       (revision 821)
+@@ -45,6 +45,7 @@
+ #endif
+   unsigned char hwaddr[DHCP_CHADDR_MAX];
+   char interface[IF_NAMESIZE];
++  unsigned int uid;
+ };
+ static struct script_data *buf = NULL;
+@@ -60,7 +61,7 @@
+      then fork our process. */
+   if (pipe(pipefd) == -1 || !fix_fd(pipefd[1]) || (pid = fork()) == -1)
+     {
+-      send_event(err_fd, EVENT_PIPE_ERR, errno);
++      send_event(err_fd, EVENT_PIPE_ERR, errno, 0);
+       _exit(0);
+     }
+@@ -87,13 +88,13 @@
+       {
+         if (daemon->options & OPT_NO_FORK)
+           /* send error to daemon process if no-fork */
+-          send_event(event_fd, EVENT_HUSER_ERR, errno);
++          send_event(event_fd, EVENT_HUSER_ERR, errno, 0);
+         else
+           {
+             /* kill daemon */
+-            send_event(event_fd, EVENT_DIE, 0);
++            send_event(event_fd, EVENT_DIE, 0, 0);
+             /* return error */
+-            send_event(err_fd, EVENT_HUSER_ERR, errno);;
++            send_event(err_fd, EVENT_HUSER_ERR, errno, 0);
+           }
+         _exit(0);
+       }
+@@ -122,6 +123,8 @@
+       action_str = "del";
+       else if (data.action == ACTION_ADD)
+       action_str = "add";
++      else if (data.action == ACTION_ACCESS)
++      action_str = "access";
+       else if (data.action == ACTION_OLD || data.action == ACTION_OLD_HOSTNAME)
+       action_str = "old";
+       else
+@@ -178,9 +181,11 @@
+               {
+                 /* On error send event back to main process for logging */
+                 if (WIFSIGNALED(status))
+-                  send_event(event_fd, EVENT_KILLED, WTERMSIG(status));
+-                else if (WIFEXITED(status) && WEXITSTATUS(status) != 0)
+-                  send_event(event_fd, EVENT_EXITED, WEXITSTATUS(status));
++                  send_event(event_fd, EVENT_KILLED, WTERMSIG(status), data.uid);
++                else if (WIFEXITED(status))
++                  send_event(event_fd, EVENT_EXITED, WEXITSTATUS(status), data.uid);
++                  else
++                  send_event(event_fd, EVENT_EXITED, -1, data.uid);
+                 break;
+               }
+             
+@@ -263,7 +268,7 @@
+         err = errno;
+       }
+       /* failed, send event so the main process logs the problem */
+-      send_event(event_fd, EVENT_EXEC_ERR, err);
++      send_event(event_fd, EVENT_EXEC_ERR, err, data.uid);
+       _exit(0); 
+     }
+ }
+@@ -295,7 +300,7 @@
+ }
+  
+ /* pack up lease data into a buffer */    
+-void queue_script(int action, struct dhcp_lease *lease, char *hostname, time_t now)
++void queue_script(int action, struct dhcp_lease *lease, char *hostname, time_t now, unsigned int uid)
+ {
+   unsigned char *p;
+   size_t size;
+@@ -332,6 +337,7 @@
+       buf_size = size;
+     }
++  buf->uid = uid;
+   buf->action = action;
+   buf->hwaddr_len = lease->hwaddr_len;
+   buf->hwaddr_type = lease->hwaddr_type;
+@@ -393,12 +399,15 @@
+   return bytes_in_buf == 0;
+ }
+-void helper_write(void)
++/* returns -1 if write failed for a reason, 1 if no data exist
++ * and 0 if everything was ok.
++ */
++int helper_write(void)
+ {
+   ssize_t rc;
+   if (bytes_in_buf == 0)
+-    return;
++    return 1;
+   
+   if ((rc = write(daemon->helperfd, buf, bytes_in_buf)) != -1)
+     {
+@@ -409,9 +418,11 @@
+   else
+     {
+       if (errno == EAGAIN || errno == EINTR)
+-      return;
++      return -1;
+       bytes_in_buf = 0;
+     }
++    
++  return 0;
+ }
+ #endif
+Index: src/rfc2131.c
+===================================================================
+--- src/rfc2131.c      (revision 696)
++++ src/rfc2131.c      (revision 821)
+@@ -100,8 +100,49 @@
+                                     int clid_len, unsigned char *clid, int *len_out);
+ static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt); 
++static int check_access_script( int piperead, struct dhcp_lease *lease, struct dhcp_packet *mess, time_t now)
++{
++#ifndef NO_FORK
++unsigned int uid;
++struct event_desc ev;
++int ret;
++struct dhcp_lease _lease;
++
++  if (daemon->lease_change_command == NULL) return 0; /* ok */
++
++  if (!lease) { /* if host has not been seen before lease is NULL */
++      memset(&_lease, 0, sizeof(_lease));
++      lease = &_lease;
++      lease_set_hwaddr(lease, mess->chaddr, NULL, mess->hlen, mess->htype, 0);
++  }
++
++  uid = rand16();
++  queue_script(ACTION_ACCESS, lease, NULL, now, uid);
++
++  /* send all data to helper process */
++  do 
++    {
++      helper_write();
++    } while (helper_buf_empty() == 0);
++
++  /* wait for our event */
++  ret = 0;
++  do 
++    {
++      ret = async_event( piperead, now, &ev, SCRIPT_TIMEOUT);
++    }
++  while(ev.priv != uid && ret >= 0);
++
++  if (ret < 0 || ev.data != 0) /* timeout or error */
++    {
++      return -1;
++    }
++
++#endif
++  return 0; /* ok */
++}
+         
+-size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
++size_t dhcp_reply(int piperead, struct dhcp_context *context, char *iface_name, int int_index,
+                 size_t sz, time_t now, int unicast_dest, int *is_inform)
+ {
+   unsigned char *opt, *clid = NULL;
+@@ -252,7 +293,7 @@
+       mac->netid.next = netid;
+       netid = &mac->netid;
+       }
+-  
++
+   /* Determine network for this packet. Our caller will have already linked all the 
+      contexts which match the addresses of the receiving interface but if the 
+      machine has an address already, or came via a relay, or we have a subnet selector, 
+@@ -329,7 +370,7 @@
+           my_syslog(LOG_INFO, _("Available DHCP range: %s -- %s"), daemon->namebuff, inet_ntoa(context_tmp->end));
+       }
+     }
+-
++    
+   mess->op = BOOTREPLY;
+   
+   config = find_config(daemon->dhcp_conf, context, clid, clid_len, 
+@@ -418,7 +459,7 @@
+             else
+               mess->yiaddr = lease->addr;
+           }
+-        
++
+         if (!message && 
+             !lease && 
+             (!(lease = lease_allocate(mess->yiaddr))))
+@@ -641,7 +682,14 @@
+       memcpy(req_options, option_ptr(opt, 0), option_len(opt));
+       req_options[option_len(opt)] = OPTION_END;
+     }
+-  
++
++  if (mess_type == DHCPREQUEST || mess_type == DHCPDISCOVER)
++    if (check_access_script(piperead, lease, mess, now) < 0)
++      {
++        my_syslog(LOG_INFO, _("Ignoring client due to access script"));
++        return 0;
++      }
++
+   switch (mess_type)
+     {
+     case DHCPDECLINE:
+Index: src/log.c
+===================================================================
+--- src/log.c  (revision 696)
++++ src/log.c  (revision 821)
+@@ -73,7 +73,7 @@
+   if (!log_reopen(daemon->log_file))
+     {
+-      send_event(errfd, EVENT_LOG_ERR, errno);
++      send_event(errfd, EVENT_LOG_ERR, errno, 0);
+       _exit(0);
+     }
+Index: src/lease.c
+===================================================================
+--- src/lease.c        (revision 696)
++++ src/lease.c        (revision 821)
+@@ -511,7 +511,7 @@
+       if (lease->old_hostname)
+       {
+ #ifndef NO_FORK
+-        queue_script(ACTION_OLD_HOSTNAME, lease, lease->old_hostname, now);
++        queue_script(ACTION_OLD_HOSTNAME, lease, lease->old_hostname, now, 0);
+ #endif
+         free(lease->old_hostname);
+         lease->old_hostname = NULL;
+@@ -520,7 +520,7 @@
+       else 
+       {
+ #ifndef NO_FORK
+-        queue_script(ACTION_DEL, lease, lease->hostname, now);
++        queue_script(ACTION_DEL, lease, lease->hostname, now, 0);
+ #endif
+         old_leases = lease->next;
+         
+@@ -540,7 +540,7 @@
+     if (lease->old_hostname)
+       {       
+ #ifndef NO_FORK
+-      queue_script(ACTION_OLD_HOSTNAME, lease, lease->old_hostname, now);
++      queue_script(ACTION_OLD_HOSTNAME, lease, lease->old_hostname, now, 0);
+ #endif
+       free(lease->old_hostname);
+       lease->old_hostname = NULL;
+@@ -552,7 +552,7 @@
+       (lease->aux_changed && (daemon->options & OPT_LEASE_RO)))
+       {
+ #ifndef NO_FORK
+-      queue_script(lease->new ? ACTION_ADD : ACTION_OLD, lease, lease->hostname, now);
++      queue_script(lease->new ? ACTION_ADD : ACTION_OLD, lease, lease->hostname, now, 0);
+ #endif
+       lease->new = lease->changed = lease->aux_changed = 0;
+       
+Index: man/dnsmasq.8
+===================================================================
+--- man/dnsmasq.8      (revision 696)
++++ man/dnsmasq.8      (revision 821)
+@@ -724,12 +724,15 @@
+ .B \-6 --dhcp-script=<path>
+ Whenever a new DHCP lease is created, or an old one destroyed, the
+ binary specified by this option is run. The arguments to the process
+-are "add", "old" or "del", the MAC
++are "add", "old", "access" or "del", the MAC
+ address of the host (or "<null>"), the IP address, and the hostname,
+ if known. "add" means a lease has been created, "del" means it has
+ been destroyed, "old" is a notification of an existing lease when
+ dnsmasq starts or a change to MAC address or hostname of an existing
+ lease (also, lease length or expiry and client-id, if leasefile-ro is set).
++The "access" keyword means that a request was just received and depending
++on the script exit status request for address will be granted, if exit status
++is zero or not if it is non-zero.
+ The process is run as root (assuming that dnsmasq was originally run as
+ root) even if dnsmasq is configured to change UID to an unprivileged user.
+ The environment is inherited from the invoker of dnsmasq, and if the
index f048c008d409e89f32b7109f527d7f31807ee04c..82b1c7657daa6c09c3cd5beac83973458977e060 100644 (file)
@@ -5,12 +5,10 @@
        <policy user="root">
                <allow own="uk.org.thekelleys.dnsmasq"/>
                <allow send_destination="uk.org.thekelleys.dnsmasq"/>
-                <allow send_interface="uk.org.thekelleys.dnsmasq"/>
        </policy>
        <policy context="default">
                 <deny own="uk.org.thekelleys.dnsmasq"/>
                 <deny send_destination="uk.org.thekelleys.dnsmasq"/>
-                <deny send_interface="uk.org.thekelleys.dnsmasq"/>
         </policy>
 </busconfig>
 
index 1708742ec8d85abe588fdbaae4ea2f2dda494607..b4e9d80add56c0c68d7fab09036e938de970be06 100644 (file)
 #dhcp-boot=net:#gpxe,undionly.kpxe
 #dhcp-boot=mybootimage
  
+# Encapsulated options for Etherboot gPXE. All the options are
+# encapsulated within option 175
+#dhcp-option=encap:175, 1, 5b         # priority code
+#dhcp-option=encap:175, 176, 1b       # no-proxydhcp 
+#dhcp-option=encap:175, 177, string   # bus-id 
+#dhcp-option=encap:175, 189, 1b       # BIOS drive code
+#dhcp-option=encap:175, 190, user     # iSCSI username
+#dhcp-option=encap:175, 191, pass     # iSCSI password
+
+# Test for the architecture of a netboot client. PXE clients are
+# supposed to send their architecture as option 93. (See RFC 4578)
+#dhcp-match=peecees, option:client-arch, 0 #x86-32
+#dhcp-match=itanics, option:client-arch, 2 #IA64
+#dhcp-match=hammers, option:client-arch, 6 #x86-64
+#dhcp-match=mactels, option:client-arch, 7 #EFI x86-64 
+
 # Enable dnsmasq's built-in TFTP server
 #enable-tftp
 
 #alias=1.2.3.4,5.6.7.8
 # and this maps 1.2.3.x to 5.6.7.x
 #alias=1.2.3.0,5.6.7.0,255.255.255.0
-
+# and this maps 192.168.0.10->192.168.0.40 to 10.0.0.10->10.0.0.40
+#alias=192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0
 
 # Change these lines if you want dnsmasq to serve MX records.
 
index d8b8fd9b4dd03a2f6880e3a9dc0da7f80ec81bf9..7eefe34427b77bd72eb54276d58be32f5da7e8db 100644 (file)
--- a/doc.html
+++ b/doc.html
@@ -89,11 +89,11 @@ Dnsmasq is part of the Debian distribution, it can be downloaded from
 <A HREF="http://ftp.debian.org/debian/pool/main/d/dnsmasq/"> here</A> or installed using <TT>apt</TT>.
 
 <H2>Links.</H2>
-There is an article in German on dnsmasq at <A
-HREF="http://www.linuxnetmag.com/de/issue7/m7dnsmasq1.html">http://www.linuxnetmag.com/de/issue7/m7dnsmasq1.html</A>
-and Damien Raude-Morvan has one in French at <A HREF="http://www.drazzib.com/docs-dnsmasq.html">http://www.drazzib.com/docs-dnsmasq.html</A>
+Damien Raude-Morvan has an article in French at <A HREF="http://www.drazzib.com/docs-dnsmasq.html">http://www.drazzib.com/docs-dnsmasq.html</A>
 There is a good article about dnsmasq at <A
 HREF="http://www.enterprisenetworkingplanet.com/netos/article.php/3377351">http://www.enterprisenetworkingplanet.com/netos/article.php/3377351</A>
+and another at <A
+HREF="http://www.linux.com/articles/149040">http://www.linux.com/articles/149040</A>
 and Ilya Evseev has an article in Russian about dnsmasq to be found at <A HREF="http://ilya-evseev.narod.ru/articles/dnsmasq"> http://ilya-evseev.narod.ru/articles/dnsmasq</A>
 <H2>License.</H2>
 Dnsmasq is distributed under the GPL. See the file COPYING in the distribution 
index a2f90a763a843902aed68a4986f21fcc0744bbad..cd096e3ce789fb320c71881c495e5864d1cf974f 100644 (file)
@@ -15,8 +15,8 @@ contents of /etc/hosts so that local hostnames
 which do not appear in the global DNS can be resolved and also answers
 DNS queries for DHCP configured hosts.
 .PP
-The dnsmasq DHCP server supports static address assignments, multiple
-networks, DHCP-relay and RFC3011 subnet specifiers. It automatically
+The dnsmasq DHCP server supports static address assignments and multiple
+networks. It automatically
 sends a sensible default set of DHCP options, and can be configured to
 send any desired set of DHCP options, including vendor-encapsulated
 options. It includes a secure, read-only,
@@ -208,13 +208,17 @@ Bogus private reverse lookups. All reverse lookups for private IP ranges (ie 192
 which are not found in /etc/hosts or the DHCP leases file are answered
 with "no such domain" rather than being forwarded upstream.
 .TP
-.B \-V, --alias=<old-ip>,<new-ip>[,<mask>]
+.B \-V, --alias=[<old-ip>]|[<start-ip>-<end-ip>],<new-ip>[,<mask>]
 Modify IPv4 addresses returned from upstream nameservers; old-ip is
 replaced by new-ip. If the optional mask is given then any address
 which matches the masked old-ip will be re-written. So, for instance
 .B --alias=1.2.3.0,6.7.8.0,255.255.255.0 
 will map 1.2.3.56 to 6.7.8.56 and 1.2.3.67 to 6.7.8.67. This is what
-Cisco PIX routers call "DNS doctoring".
+Cisco PIX routers call "DNS doctoring". If the old IP is given as
+range, then only addresses in the range, rather than a whole subnet,
+are re-written. So 
+.B --alias=192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0
+maps 192.168.0.10->192.168.0.40 to 10.0.0.10->10.0.0.40
 .TP 
 .B \-B, --bogus-nxdomain=<ipaddr>
 Transform replies which contain the IP address given into "No such
@@ -513,13 +517,15 @@ Token-Ring hardware address, since the ARP-address type for token ring
 is 6. 
 
 As a special case, it is possible to include more than one
-hardware address. This allows an IP address to be associated with
+hardware address. eg:
+.B --dhcp-host=11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.2
+This allows an IP address to be associated with
 multiple hardware addresses, and gives dnsmasq permission to abandon a
 DHCP lease to one of the hardware addresses when another one asks for
 a lease. Beware that this is a dangerous thing to do, it will only
 work reliably if only one of the hardware addresses is active at any
-time and there is no way for dnsmasq to enforce this. It is, however
-useful, for instance to allocate a stable IP address to a laptop which
+time and there is no way for dnsmasq to enforce this. It is, for instance,
+useful to allocate a stable IP address to a laptop which
 has both wired and wireless interfaces.
 .TP
 .B --dhcp-hostsfile=<file>
@@ -543,7 +549,7 @@ have exactly the same effect as
 options containing the same information. /etc/ethers is re-read when 
 dnsmasq receives SIGHUP.
 .TP
-.B \-O, --dhcp-option=[<network-id>,[<network-id>,]][vendor:[<vendor-class>],][<opt>|option:<opt-name>],[<value>[,<value>]]
+.B \-O, --dhcp-option=[<network-id>,[<network-id>,]][encap:<opt>,][vendor:[<vendor-class>],][<opt>|option:<opt-name>],[<value>[,<value>]]
 Specify different or extra options to DHCP clients. By default,
 dnsmasq sends some standard options to DHCP clients, the netmask and
 broadcast address are set to the same as the host running dnsmasq, and
@@ -603,10 +609,18 @@ client. It is
 possible to omit the vendorclass completely;
 .B --dhcp-option=vendor:,1,0.0.0.0
 in which case the encapsulated option is always sent.
+
+Options may be encapsulated within other options: for instance
+.B --dhcp-option=encap:175, 190, "iscsi-client0"
+will send option 175, within which is the option 190. If multiple
+options are given which are encapsulated with the same option number
+then they will be correctly combined into one encapsulated option.
+encap: and vendor: are may not both be set in the same dhcp-option.
+
 The address 0.0.0.0 is not treated specially in
-encapsulated vendor class options.
+encapsulated options.
 .TP
-.B --dhcp-option-force=[<network-id>,[<network-id>,]][vendor:[<vendor-class>],]<opt>,[<value>[,<value>]]
+.B --dhcp-option-force=[<network-id>,[<network-id>,]][encap:<opt>,][vendor:[<vendor-class>],]<opt>,[<value>[,<value>]]
 This works in exactly the same way as
 .B --dhcp-option
 except that the option will always be sent, even if the client does
@@ -658,10 +672,22 @@ agent ID and one provided by a relay agent, the network-id tag is set.
 .B --dhcp-subscrid=<network-id>,<subscriber-id>
 Map from RFC3993 subscriber-id relay agent options to network-id tags.
 .TP
-.B --dhcp-match=<network-id>,<option number>
-Set the network-id tag if the client sends a DHCP option of the given
-number. This can be used to identify particular clients which send
-information using private option numbers.
+.B --dhcp-match=<network-id>,<option number>|option:<option name>[,<value>]
+Without a value, set the network-id tag if the client sends a DHCP
+option of the given number or name. When a value is given, set the tag only if
+the option is sent and matches the value. The value may be of the form
+"01:ff:*:02" in which case the value must match (apart from widcards)
+but the option sent may have unmatched data past the end of the
+value. The value may also be of the same form as in 
+.B dhcp-option
+in which case the option sent is treated as an array, and one element
+must match, so
+
+--dhcp-match=efi-ia32,option:client-arch,6
+
+will set the tag "efi-ia32" if the the number 6 appears in the list of
+architectures sent by the client in option 93. (See RFC 4578 for
+details.)  If the value is a string, substring matching is used. 
 .TP
 .B \-J, --dhcp-ignore=<network-id>[,<network-id>]
 When all the given network-ids match the set of network-ids derived
@@ -737,15 +763,7 @@ Extra logging for DHCP: log all the options sent to DHCP clients and
 the netid tags used to determine them.
 .TP
 .B \-l, --dhcp-leasefile=<path>
-Use the specified file to store DHCP lease information. If this option
-is given but no dhcp-range option is given then dnsmasq version 1
-behaviour is activated. The file given is assumed to be an ISC dhcpd
-lease file and parsed for leases which are then added to the DNS
-system if they have a hostname. This functionality may have been
-excluded from dnsmasq at compile time, in which case an error will
-occur. In any case note that ISC leasefile integration is a deprecated
-feature. It should not be used in new installations, and will be
-removed in a future release.
+Use the specified file to store DHCP lease information.
 .TP 
 .B \-6 --dhcp-script=<path>
 Whenever a new DHCP lease is created, or an old one destroyed, the
index bc118f900daa5f58f0445d550d8fe9f2a8562a85..67605f0c937e64c036f08be8940e83d558cd077f 100644 (file)
@@ -236,7 +236,7 @@ trouvées dans /etc/hosts ou dans le fichier de baux DHCP se voient retournées
 une réponse "pas de tel domaine" ("no such domain") au lieu d'être transmises
 aux serveurs de nom amont ("upstream server").
 .TP
-.B \-V, --alias=<ancienne IP>,<nouvelle IP>[,<masque>]
+.B \-V, --alias=[<ancienne IP>]|[<IP de début>-<IP de fin>],<nouvelle IP>[,<masque>]
 Modifie les adresses IPv4 retournées par les serveurs de nom amont;
 <ancienne IP> est remplacée par <nouvelle IP>. Si le <masque> optionnel est
 fourni, alors toute adresse correspondant Ã  l'adresse <ancienne IP>/<masque>
@@ -244,7 +244,11 @@ sera réécrite. Ainsi par exemple
 .B --alias=1.2.3.0,6.7.8.0,255.255.255.0 
 modifiera 1.2.3.56 en 6.7.8.56 et 1.2.3.67 en 6.7.8.67. 
 Cette fonctionnalité correspond Ã  ce que les routeurs Cisco PIX appellent
-"bidouillage DNS" ("DNS doctoring").
+"bidouillage DNS" ("DNS doctoring"). Si l'ancienne IP est donnée sous la forme
+d'une gamme d'adresses, alors seules les adresses dans cette gamme seront
+réecrites, et non le sous-réseau dans son ensemble. Ainsi,
+.B --alias=192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0
+fait correspondre 192.168.0.10->192.168.0.40 Ã  10.0.0.10->10.0.0.40
 .TP 
 .B \-B, --bogus-nxdomain=<adresse IP>
 Transforme les réponses contenant l'adresse IP fournie en réponses "pas de tel
@@ -455,6 +459,14 @@ Définit un enregistrement DNS de type PTR.
 .B --naptr-record=<nom>,<ordre>,<préférence>,<drapeaux>,<service>,<expr. régulière>[,<remplacement>]
 Retourne un enregistrement de type NAPTR, tel que spécifié dans le RFC3403.
 .TP
+.B --cname=<cname>,<cible>
+Retourne un enregistrement de type CNAME qui indique que <cname> est en
+réalité <cible>. 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. 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 vers la même cible.
+.TP
 .B --interface-name=<nom>,<interface>
 Définit un entregistrement DNS associant le nom avec l'adresse primaire sur
 l'interface donnée en argument. Cette option spécifie un enregistrement de type
@@ -545,6 +557,7 @@ réfère Ã  l'hôte d'identifiant 01:02:03:04. Il est Ã©galement possible de
 spécifier l'identifiant client sous la forme d'une chaîne de caractères, comme
 ceci :
 .B --dhcp-host=id:identifiantclientsousformedechaine,..... 
+
 L'option spéciale id:* signifie : "ignorer tout identifiant client et n'utiliser
 que l'adresse matérielle". Cela est utile lorsqu'un client présente un
 identifiant client mais pas les autres.
@@ -558,7 +571,9 @@ spécifiée par son adresse matérielle, son identifiant client ou son nom d'hô
 Par exemple
 .B --dhcp-host=00:20:e0:3b:13:af,ignore
 Cela est utile lorsqu'un autre serveur DHCP sur le réseau doit Ãªtre utilisé par
-certaines machines. Le paramètre net:<identifiant réseau> permet de définir un
+certaines machines.
+
+Le paramètre net:<identifiant réseau> permet de définir un
 identifiant de réseau lorsque l'option dhcp-host est utilisée. Cela peut servir
 Ã  sélectionner des options DHCP juste pour cet hôte. Lorsqu'une machine coïncide
 avec une directive dhcp-host (ou une impliquée par /etc/ethers), alors
@@ -573,12 +588,26 @@ avec des octets joker, ainsi par exemple
 demande Ã  Dnsmasq d'ignorer une gamme d'adresses matérielles. Il est  Ã  noter
 que "*" doit-être précédé d'un caractère d'échappement ou mis entre guillemets
 lorsque spécifié en option de ligne de commande, mais pas dans le fichier de
-configuration. Les adresses matérielles coïncident en principe avec n'importe
+configuration.
+
+Les adresses matérielles coïncident en principe avec n'importe
 quel type de réseau (ARP), mais il est possible de les limiter Ã  un seul type
 ARP en les précédant du type ARP (en Hexadécimal) et de "-". Ainsi
 .B --dhcp-host=06-00:20:e0:3b:13:af,1.2.3.4 
 coïncidera uniquement avec des adresses matérielles Token-Ring, puisque le type
 ARP pour une adresse Token-Ring est 6.
+
+Un cas spécial correspond Ã  l'inclusion d'une ou plusieurs adresses
+matérielles, c-à-d :
+.B --dhcp-host=11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.2.
+Cela permet Ã  une adresse IP d'être associé Ã  plusieurs adresses
+matérielles, et donne Ã  dnsmasq la permission d'abandonner un bail DHCP
+attribué Ã  l'une de ces adresses lorsqu'une autre adresse dans la liste
+demande un bail. Ceci est une opération dangereuse qui ne fonctionnera
+de manière fiable que si une adresse matérielle est active Ã  un moment
+donné et dnsmasq n'a aucun moyen de s'assurer de cela. Cela est utile,
+par exemple, pour allouer une adresse IP stable Ã  un laptop qui
+aurait Ã  la fois une connexion filaire et sans-fil.
 .TP
 .B --dhcp-hostsfile=<fichier>
 Lis les informations d'hôtes DHCP dans le fichier spécifié. Le fichier contient
@@ -603,7 +632,7 @@ par Dnsmasq, ces lignes ont exactement le même effet que l'option
 contenant les mêmes informations. /etc/ethers est relu Ã  la réception d'un
 signal SIGHUP par Dnsmasq.
 .TP
-.B \-O, --dhcp-option=[<identifiant_de_réseau>,[<identifiant_de_réseau>,]][vendor:[<classe_vendeur>],][<opt>|option:<nom d'option>],[<valeur>[,<valeur>]]
+.B \-O, --dhcp-option=[<identifiant_de_réseau>,[<identifiant_de_réseau>,]][encap:<option>,][vendor:[<classe_vendeur>],][<option>|option:<nom d'option>],[<valeur>[,<valeur>]]
 Spécifie des options différentes ou supplémentaires pour des clients DHCP. Par
 défaut, Dnsmasq envoie un ensemble standard d'options aux clients DHCP : le
 masque de réseau et l'adresse de broadcast sont les mêmes que pour l'hôte
@@ -673,10 +702,19 @@ pour sélectionner les options encapsulées, de préférence Ã  toute option env
 par le client. Il est possible d'omettre complètement une classe de vendeur :
 .B --dhcp-option=vendor:,1,0.0.0.0
 Dans ce cas l'option encapsulée est toujours envoyée.
+
+Les options peuvent-être encapsulées au sein d'autres options :
+par exemple
+.B --dhcp-option=encap:175, 190, "iscsi-client0"
+enverra l'option 175, au sein de laquelle se trouve l'option 190.
+Plusieurs options encapsulées avec le même numéro d'option seront correctement
+combinées au sein d'une seule option encapsulée. Il n'est pas possible de
+spécifier encap: et vendor: au sein d'une même option dhcp.
+
 L'adresse 0.0.0.0 n'est pas traitée de manière particulière lorsque fournie dans
-une option encapsulée de classe de vendeur.
+une option encapsulée.
 .TP
-.B --dhcp-option-force=[<identifiant de réseau>,[<identifiant de réseau>,]][vendor:[<classe de vendeur>],]<opt>,[<valeur>[,<valeur>]]
+.B --dhcp-option-force=[<identifiant de réseau>,[<identifiant de réseau>,]][encap:<option>,][vendor:[<classe de vendeur>],]<option>,[<valeur>[,<valeur>]]
 Cela fonctionne exactement de la même façon que
 .B --dhcp-option
 sauf que cette option sera toujours envoyée, même si le client ne la demande pas
@@ -738,11 +776,23 @@ relais DHCP, alors l'identifiant de réseau est positionné.
 Associe des options de relais DHCP issues de la RFC3993 Ã  des identifiants de
 réseau.
 .TP
-.B --dhcp-match=<identifiant de réseau>,<numéro d'option>
-Associe l'identifiant de réseau si le client envoie une option DHCP
-avec le numéro spécifié. Cela peut-être utilisé pour identifier des
-clients spécifiques qui envoient des informations par le biais de
-numéros privés d'option.
+.B --dhcp-match=<identifiant de réseau>,<numéro d'option>|option:<nom d'option>[,<valeur>]
+Si aucune valeur n'est spécifiée, associe l'identifiant de réseau si le client
+envoie une option DHCP avec le numéro ou le nom spécifié. Lorsqu'une valeur est
+fournie, positionne le label seulement dans le cas où l'option est fournie et
+correspond Ã  la valeur. La valeur peut-être de la forme "01:ff:*:02", auquel
+cas le début de l'option doit correspondre (en respectant les jokers). La
+valeur peut aussi Ãªtre de la même forme que dans
+.B dhcp-option
+, auquel cas l'option est traitée comme un tableau de valeur, et un des
+éléments doit correspondre, ainsi
+
+--dhcp-match=efi-ia32,option:client-arch,6
+
+spécifie le label "efi-ia32" si le numéro 6 apparaît dnas la liste
+d'architectures envoyé par le client au sein de l'option 93. (se réferer
+au RFC 4578 pour plus de détails). Si la valeur est un chaine de caractères,
+celle-ci est recherchée (correspondance en temps que sous-chaîne).
 .TP
 .B \-J, --dhcp-ignore=<identifiant de réseau>[,<identifiant de réseau>]
 Lorsque tous les identifiants de réseau fournis coïncident avec la liste
@@ -802,10 +852,14 @@ numéro est utilisé pour le port serveur et ce numéro plus 1 est utilisé pour
 port client. Enfin, en fournissant deux numéros de ports, il est possible de
 spécifier arbitrairement 2 ports Ã  la fois pour le serveur et pour le client DHCP.
 .TP
-.B \-3, --bootp-dynamic
+.B \-3, --bootp-dynamic[=<identifiant de réseau>[,<identifiant de réseau>]]
 Permet l'allocation dynamique d'adresses IP Ã  des clients BOOTP. Utiliser cette
 option avec précaution, une adresse allouée Ã  un client BOOTP Ã©tant perpétuelle,
-et de fait n'est plus disponibles pour d'autres hôtes.
+et de fait n'est plus disponibles pour d'autres hôtes. Si aucun argument n'est
+donné, alors cette option permet une allocation dynamique dans tous les cas. Si
+des arguments sont spécifiés, alors l'allocation ne se fait que lorsque tous
+les identifiants coïncident. Il est possible de répeter cette option avec
+plusieurs jeux d'arguments.
 .TP
 .B \-5, --no-ping
 Par défaut, le serveur DHCP tente de s'assurer qu'une adresse n'est pas utilisée
@@ -822,32 +876,28 @@ détermination de celles-ci.
 .TP
 .B \-l, --dhcp-leasefile=<chemin de fichier>
 Utilise le fichier dont le chemin est fourni pour stocker les informations de
-baux DHCP. Si cette option est fournie mais qu'aucune option de type dhcp-range
-n'est donnée, alors un comportement de type Dnsmasq version 1 est activé. Le
-fichier fourni est supposé Ãªtre un fichier de baux DHCP de type ISC DHCPD et est
-parcouru Ã  la recherche de baux contenant des noms d'hôtes. Les noms trouvés
-sont rajoutés au DNS. Cette fonctionalité peut Ãªtre exclue de Dnsmasq Ã  la
-compilation, auquel cas une erreur sera produite. Il est Ã  noter que
-l'intégration avec un fichier de baux au format ISC est une fonctionalité
-obsolète. Elle ne devrait pas Ãªtre utilisée dans les nouvelles installations et
-sera retirée dans une future version.
+baux DHCP.
 .TP 
 .B \-6 --dhcp-script=<chemin de fichier>
 Lorsqu'un bail DHCP est créé, ou qu'un ancien est supprimé, le fichier dont le
 chemin  est spécifié est exécuté. Les arguments fournis Ã  celui-ci sont soit
 "add" ("ajouter"), "old" ("ancien") ou "del" ("supprimer"), suivi de l'adresse
-MAC de l'hôte (ou "<null>") puis l'adresse IP et le nom d'hôte si celui-ci est
+MAC de l'hôte puis l'adresse IP et le nom d'hôte si celui-ci est
 connu."add" signifie qu'un bail a Ã©té créé, "del" signifie qu'il a Ã©té supprimé,
 "old" notifie que le bail existait au lancement de Dnsmasq, ou un changement
 d'adresse MAC ou de nom d'hôte pour un bail existant (ou, dans le cas où
 leasefile-ro est spécifié, un changement de durée de bail ou d'identifiant
-d'hôte). Le processus est exécuté en temps que super-utilisateur (si Dnsmasq a
-été lancé en temps que "root"), même si Dnsmasq est configuré pour changer son
-UID pour celle d'un utilisateur non-privilégié. L'environnement est hérité de
-celui de l'invocation du processus Dnsmasq, et si l'hôte fournit un identifiant
-de client, celui-ci est stocké dans la variable d'environnement
-DNSMASQ_CLIENT_ID. Si le client fournit une information de classe de vendeur ou
-de classe d'utilisateur, celles-ci sont positionnées dans les variables
+d'hôte). Si l'adresse Mac est d'un type de réseau autre qu'ethernet, il est
+nécessaire de la préceder du type de réseau, par exemple "06-01:23:45:67:89:ab"
+pour du token ring. Le processus est exécuté en temps que super-utilisateur 
+(si Dnsmasq a Ã©té lancé en temps que "root"), même si Dnsmasq est configuré 
+pour changer son UID pour celle d'un utilisateur non-privilégié.
+L'environnement est hérité de celui de l'invocation du processus Dnsmasq, et
+si l'hôte fournit un identifiant de client, celui-ci est stocké dans la
+variable d'environnement DNSMASQ_CLIENT_ID. Si un nom de domaine pleinement
+qualifié (FQDN)  est connu pour l'hôte, la part relative au domaine est stockée
+dans DNSMASQ_DOMAIN. Si le client fournit une information de classe de vendeur
+ou de classe d'utilisateur, celles-ci sont positionnées dans les variables
 DNSMASQ_VENDOR_CLASS et DNSMASQ_USER_CLASS0 Ã  DNSMASQ_USER_CLASSn
 respectivement, mais seulement pour les actions "add" et "old" lorsqu'un hôte
 reprend un bail existant, ces variables n'étant pas stockées dans la base de
@@ -905,8 +955,10 @@ uniquement disponible sur les plateformes BSD, et est uniquement nécessaire
 lors de l'utilisation de pont ethernet "ancien mode", puisque dans ce cas les
 paquets arrivent sur des interfaces "tap" n'ayant pas d'adresse IP.
 .TP
-.B \-s, --domain=<domaine>
-Spécifie le domaine du serveur DHCP. Cela a deux effets; tout d'abord, le
+.B \-s, --domain=<domaine>[,<gamme d'adresses>]
+Spécifie le domaine du serveur DHCP. Le domaine peut Ãªtre donné de manière
+inconditionnelle (sans spécifier de gamme d'adresses IP) ou pour des gammes
+d'adresses IP limitées. Cela a deux effets; tout d'abord, le
 serveur DHCP retourne le domaine Ã  tous les hôtes le demandant, deuxièmement,
 cela spécifie le domaine valide pour les hôtes DHCP configurés. Le but de cela
 est de contraindre les noms d'hôte afin qu'aucun hôte sur le LAN ne puisse
@@ -925,7 +977,29 @@ et avoir une machine dont le nom DHCP serait "laptop". L'adresse IP de cette
 machine sera disponible Ã  la fois pour "laptop" et "laptop.thekelleys.org.uk".
 Si la valeur fournie pour <domaine> est "#", alors le nom de domaine est
 positionné Ã  la première valeur de la directive "search" du fichier
-/etc/resolv.conf (ou Ã©quivalent).
+/etc/resolv.conf (ou Ã©quivalent). La gamme d'adresses peut Ãªtre de la forme
+<adresse ip>,<adresse ip> ou <adresse ip>/<masque de réseau> voire une simple
+<adresse ip>. Voir
+.B --dhcp-fqdn
+qui peut changer le comportement de dnsmasq relatif aux domaines.
+.TP
+.B --dhcp-fqdn
+Dans le mode par défaut, dnsmasq insère les noms non-qualifiés des clients
+DHCP dans le DNS. Pour cette raison, les noms doivent Ãªtre uniques, même si
+deux clients ayant le même nom sont dans deux domaines différents. Si un
+deuxième client DHCP apparaît ayant le même nom qu'un client déjà existant,
+ce nom est transféré au nouveau client. Si
+.B --dhcp-fqdn
+est spécifié, ce comportement change : les noms non qualifiés ne sont plus
+rajoutés dans le DNS, seuls les noms qualifiés le sont. Deux clients DHCP
+avec le même nom peuvent tous les deux garder le nom, pour peu que la partie
+relative au domaine soit différente (c-à-d que les noms pleinements qualifiés
+diffèrent). Pour d'assurer que tous les noms ont une partie domaine, il doit-y
+avoir au moins un
+.B --domain
+sans gamme d'adresses de spécifié lorsque l'option
+.B --dhcp-fqdn 
+est configurée.
 .TP
 .B --enable-tftp
 Active la fonction serveur TFTP. Celui-ci est de manière délibérée limité aux
@@ -1164,9 +1238,12 @@ les identifiants de réseau fonctionnent comme suit : Dnsmasq associe Ã  chaque
 requête DHCP un ensemble d'identifiants de réseau; un pour la plage d'adresse
 DHCP (
 .B dhcp-range
-) utilisée pour allouer l'adresse, une pour chaque entrée
+) utilisée pour allouer l'adresse, un identifiant pour chaque entrée
 .B dhcp-host
-associée et Ã©ventuellement une pour chaque classe de vendeur ou d'utilisateur
+associée (il ajoute "known" lorsqu'une entrée dhcp-host coïncide), l'étiquette
+"bootp" pour les requêtes BOOTP, un identifiant dont le nom est le nom de
+l'interface sur laquelle la requête est arrivée, et Ã©ventuellement un
+identifiant pour chaque classe de vendeur ou d'utilisateur
 fournie par le client DHCP dans sa requête. Les options DHCP (
 .B dhcp-option 
 ) ayant un identifiant de réseau seront utilisés de préférence Ã  celles
index bbc1f770edb9d9aee84fb834c1348d418e4052eb..e1376b7b255d9e5148bb4c93e22cc93f1ae5de65 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: dnsmasq 2.24\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
 "PO-Revision-Date: 2005-09-27 09:37+0100\n"
 "Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
 "Language-Team: German <de@li.org>\n"
@@ -20,19 +20,19 @@ msgstr ""
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
 # @Simon: Here I need an example to understand it :)
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
 # @Simon: Here I need an example to understand it :)
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "lese %s - %d Adressen"
@@ -72,7 +72,7 @@ msgstr ""
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
 
-#: util.c:58
+#: util.c:56
 #, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr ""
@@ -82,22 +82,22 @@ msgstr ""
 # @Simon: I would prefer to use "noch gültige" = "still valid", would that fit to the sense? Then it would be:
 # @Simon: msgstr "Cache Größe %d, %d/%d Cache-Einfügungen verwendeten noch gültige Cache-Einträge wieder."
 # @Simon: btw, what is the "%d/%d"-part?
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr "Speicher nicht verfügbar"
 
-#: util.c:176
+#: util.c:174
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr ""
 
-#: util.c:184
+#: util.c:182
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr ""
 
 # @Simon: not perfect but I cannot get nearer right now.
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr "unendlich"
@@ -494,7 +494,7 @@ msgid "Always perform DNS queries to all servers."
 msgstr ""
 
 #: option.c:313
-msgid "Set tag if client includes option in request."
+msgid "Set tag if client includes matching option in request."
 msgstr ""
 
 #: option.c:314
@@ -521,191 +521,199 @@ msgstr ""
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:582
+#: option.c:591
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:584
+#: option.c:593
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr ""
 
 # @Simon: Here I need an example to understand it :)
-#: option.c:753
+#: option.c:767
 #, fuzzy
 msgid "bad IP address"
 msgstr "lese %s - %d Adressen"
 
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr ""
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:983
+#: option.c:1012
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1002 tftp.c:348
+#: option.c:1031 tftp.c:348
 #, c-format
 msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1040
+#: option.c:1069
 msgid "only one dhcp-hostsfile allowed"
 msgstr ""
 
-#: option.c:1047
+#: option.c:1076
 msgid "only one dhcp-optsfile allowed"
 msgstr ""
 
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr ""
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1523
+#: option.c:1541
 msgid "bad port range"
 msgstr ""
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr ""
 
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:1819
+#: option.c:1837
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:2093
+#: option.c:2094
+msgid "invalid alias range"
+msgstr ""
+
+#: option.c:2106
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2133
+#: option.c:2146
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:2163
+#: option.c:2176
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr ""
 
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr ""
 
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr ""
 
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr ""
 
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr ""
 
@@ -714,80 +722,80 @@ msgstr ""
 # @Simon: ("keinen Speicher" = "no memory", "... nicht bekommen" = "... not get") 
 # @Simon: both would be correct - but would sound rather clumsy in german
 # @Simon: how about "Nicht genügend Speicher verfügbar" = "Not enough memory available" ?
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s in Zeile %d von %%s"
 
-#: option.c:2502 option.c:2532
+#: option.c:2515 option.c:2546
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
 "\n"
 msgstr ""
 
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:2602
+#: option.c:2616
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:2603
+#: option.c:2617
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:2614
+#: option.c:2628
 msgid "try --help"
 msgstr ""
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr ""
 
-#: option.c:2619
+#: option.c:2633
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:2688
+#: option.c:2702
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:2698
+#: option.c:2712
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:2701 network.c:721
+#: option.c:2715 network.c:730
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:2719
+#: option.c:2733
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
@@ -805,78 +813,78 @@ msgstr ""
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr ""
 
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr ""
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr ""
 
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr ""
 
-#: network.c:432
+#: network.c:443
 #, c-format
 msgid "failed to create TFTP socket: %s"
 msgstr ""
 
-#: network.c:628
+#: network.c:637
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:672
+#: network.c:681
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:687
+#: network.c:696
 msgid "unqualified"
 msgstr ""
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr ""
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr ""
 
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr ""
 
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:699
+#: network.c:708
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
@@ -1063,21 +1071,21 @@ msgstr ""
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:878
+#: dnsmasq.c:881
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:911
+#: dnsmasq.c:914
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
@@ -1112,37 +1120,37 @@ msgstr ""
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:382
+#: dhcp.c:387
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr ""
 
-#: dhcp.c:719
+#: dhcp.c:731
 #, c-format
 msgid "failed to read %s:%s"
 msgstr ""
 
-#: dhcp.c:755
+#: dhcp.c:767
 #, c-format
 msgid "bad line at %s line %d"
 msgstr ""
 
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr ""
 
-#: dhcp.c:873
+#: dhcp.c:885
 #, c-format
 msgid "duplicate IP address %s in %s."
 msgstr ""
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr ""
@@ -1171,160 +1179,160 @@ msgstr ""
 msgid "failed to write %s: %s (retry in %us)"
 msgstr ""
 
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr ""
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr ""
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr ""
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr ""
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr ""
 
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr ""
 
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr ""
 
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr ""
 
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr ""
 
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr ""
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr ""
 
-#: rfc2131.c:683
+#: rfc2131.c:715
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr ""
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:746
+#: rfc2131.c:778
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:749
+#: rfc2131.c:781
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr ""
 
-#: rfc2131.c:1443
+#: rfc2131.c:1478
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:1617
+#: rfc2131.c:1696
 #, c-format
 msgid "requested options: %s"
 msgstr ""
 
-#: rfc2131.c:1666
+#: rfc2131.c:1746
 #, c-format
 msgid "next server: %s"
 msgstr ""
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr ""
@@ -1339,24 +1347,24 @@ msgstr ""
 msgid "netlink returns error: %s"
 msgstr ""
 
-#: dbus.c:115
+#: dbus.c:151
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr ""
 
-#: dbus.c:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr ""
 
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:174
+#: bpf.c:178
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
index b4b2021f35c7291797b6501a04af9af24218107a..ea56ac73a612067a909cb901ab1297724f2e601d 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: dnsmasq 2.24\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
 "PO-Revision-Date: 2005-10-07 11:04+0100\n"
 "Last-Translator: Christopher Chatham <chrislinux@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -20,17 +20,17 @@ msgstr ""
 msgid "failed to load names from %s: %s"
 msgstr "no se pudo cargar nombres desde %s: %s"
 
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, fuzzy, c-format
 msgid "bad address at %s line %d"
 msgstr "dirección errónea en %s línea %d"
 
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "nombre erróneo en %s línea %d"
 
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "direcciónes %s - %d leídas"
@@ -64,26 +64,26 @@ msgstr "b
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr "servidor %s#%d: búsquedas enviadas %u, reintentadas o fallidas %u"
 
-#: util.c:58
+#: util.c:56
 #, fuzzy, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr "no se pudo crear valor semilla para el generador de números aleatorios: %s"
 
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr "no se pudo adquirir memoria"
 
-#: util.c:176
+#: util.c:174
 #, fuzzy, c-format
 msgid "cannot create pipe: %s"
 msgstr "no se puede crear pipe: %s"
 
-#: util.c:184
+#: util.c:182
 #, fuzzy, c-format
 msgid "failed to allocate %d bytes"
 msgstr "no se pudo alocar %d bytes"
 
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr "infinito"
@@ -469,7 +469,8 @@ msgid "Always perform DNS queries to all servers."
 msgstr "Siempre realizar búsquedas DNS a todos los servidores."
 
 #: option.c:313
-msgid "Set tag if client includes option in request."
+#, fuzzy
+msgid "Set tag if client includes matching option in request."
 msgstr "Fijar etiqueta si cliente incluye opción en pedido."
 
 #: option.c:314
@@ -497,7 +498,7 @@ msgstr "Usar solo nombres de dominio completamente calificados para clientes DHC
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Especificar nombre alias para nombre DNS LOCAL."
 
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -506,209 +507,218 @@ msgstr ""
 "Modo de uso: dnsmasq [opciones]\n"
 "\n"
 
-#: option.c:582
+#: option.c:591
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Usar opciones cortas solo en la línea de comandos.\n"
 
-#: option.c:584
+#: option.c:593
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Opciones válidas son :\n"
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Opciones DHCP conocidas:\n"
 
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr "opción dhcp-option errónea"
 
-#: option.c:753
+#: option.c:767
 #, fuzzy
 msgid "bad IP address"
 msgstr "dirección IP errónea"
 
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr "dominio erróneo en dhcp-option"
 
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr "opción dhcp-option demasiado larga"
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr ""
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr "opción repetida ilegal"
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr "palabra clave repetida ilegal"
 
-#: option.c:983
+#: option.c:1012
 #, fuzzy, c-format
 msgid "cannot access directory %s: %s"
 msgstr "no se puede accesar directorio %s: %s"
 
-#: option.c:1002 tftp.c:348
+#: option.c:1031 tftp.c:348
 #, fuzzy, c-format
 msgid "cannot access %s: %s"
 msgstr "no se puede accesar %s: %s"
 
-#: option.c:1040
+#: option.c:1069
 #, fuzzy
 msgid "only one dhcp-hostsfile allowed"
 msgstr "solo un dhcp-hostsfile permitido"
 
-#: option.c:1047
+#: option.c:1076
 #, fuzzy
 msgid "only one dhcp-optsfile allowed"
 msgstr "solo un dhcp-optsfile permitido"
 
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr "preferencia MX errónea"
 
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr "nombre MX erróneo"
 
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr "destino MX erróneo"
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr "no se pueden correr archivos guiónes bajo uClinux"
 
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr "puerto erróneo"
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr "vinculación de interface no está soportado"
 
-#: option.c:1523
+#: option.c:1541
 #, fuzzy
 msgid "bad port range"
 msgstr "rango de puertos erróneo"
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr "opción bridge-interface (interface puente) errónea"
 
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr "opción dhcp-range (rango DHCP) errónea"
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr "solo una etiqueta netid permitida"
 
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr "rango DHCP inconsistente"
 
-#: option.c:1819
+#: option.c:1837
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "nombre de host DHCP erróneo"
 
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr "número de puerto inválido"
 
-#: option.c:2093
+#: option.c:2094
+#, fuzzy
+msgid "invalid alias range"
+msgstr "peso inválido"
+
+#: option.c:2106
 #, fuzzy
 msgid "bad interface name"
 msgstr "nombre de interface erróneo"
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
 msgstr "CNAME duplicado"
 
-#: option.c:2133
+#: option.c:2146
 #, fuzzy
 msgid "bad PTR record"
 msgstr "expediente PTR erróneo"
 
-#: option.c:2163
+#: option.c:2176
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "expediente NAPTR erróneo"
 
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr "expediente TXT demasiado largo"
 
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr "expediente TXT erróneo"
 
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr "expediente SRV erróneo"
 
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr "destino SRV erróneo"
 
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr "prioridad inválida"
 
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr "peso inválido"
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr "archivos jerarquizados demasiado profundo en %s"
 
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "no se puede leer %s: %s"
 
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr "falta \""
 
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr "opción errónea"
 
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr "parámetro extraño"
 
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr "parámetro ausente"
 
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr "error"
 
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s en línea %d de %%s"
 
-#: option.c:2502 option.c:2532
+#: option.c:2515 option.c:2546
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "leyendo %s"
 
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq versión %s  %s\n"
 
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -717,58 +727,58 @@ msgstr ""
 "Opciones de compilación %s\n"
 "\n"
 
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Este software viene SIN NINGUNA GARANTIA.\n"
 
-#: option.c:2602
+#: option.c:2616
 #, 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:2603
+#: option.c:2617
 #, fuzzy, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr "bajo los términos de la GNU General Public License, versión 2 o 3.\n"
 
-#: option.c:2614
+#: option.c:2628
 msgid "try --help"
 msgstr "pruebe --help"
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr "pruebe -w"
 
-#: option.c:2619
+#: option.c:2633
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "opciones de línea de comandos erróneas: %s"
 
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "no se puede obtener host-name (nombre de host): %s"
 
-#: option.c:2688
+#: option.c:2702
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "solo un archivo resolv.conf permitido en modo no-poll."
 
-#: option.c:2698
+#: option.c:2712
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "debe haber exáctamente un resolv.conf desde donde leer dominio."
 
-#: option.c:2701 network.c:721
+#: option.c:2715 network.c:730
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "no se pudo leer %s: %s"
 
-#: option.c:2719
+#: option.c:2733
 #, c-format
 msgid "no search directive found in %s"
 msgstr "ninguna directiva de búsqueda encontrada en %s"
 
-#: option.c:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr "debe haber un dominio predeterminado cuando --dhcp-fqdn está fijado"
 
@@ -786,78 +796,78 @@ msgstr "posible ataque de revinculaci
 msgid "unknown interface %s in bridge-interface"
 msgstr "interface desconocida %s en bridge-interface"
 
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr "no se pudo crear un socket escuchador: %s"
 
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr "no se pudo fijar opciones IPv6 sobre socket escuchador: %s"
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr "no se pudo acoplar socket escuchador para %s: %s"
 
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr "no se pudo escuchar en socket: %s"
 
-#: network.c:432
+#: network.c:443
 #, fuzzy, c-format
 msgid "failed to create TFTP socket: %s"
 msgstr "no se pudo crear socket TFTP: %s"
 
-#: network.c:628
+#: network.c:637
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "no se pudo acoplar socket escuchador para %s: %s"
 
-#: network.c:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorando servidor DNS %s - interface local"
 
-#: network.c:672
+#: network.c:681
 #, 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:687
+#: network.c:696
 msgid "unqualified"
 msgstr "no calificado"
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr "nombres"
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr "predeterminado"
 
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr "dominio"
 
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "usando direcciones locales solo para %s %s"
 
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "usando servidor DNS %s#%d para %s %s"
 
-#: network.c:699
+#: network.c:708
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "usando servidor DNS %s#%d(vía %s)"
 
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "usando servidor DNS %s#%d"
@@ -1048,21 +1058,21 @@ msgstr "proceso hijo hizo exit con estado %d"
 msgid "failed to execute %s: %s"
 msgstr "no se pudo ejecutar %s: %s"
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr "saliendo al recibir SIGTERM"
 
-#: dnsmasq.c:878
+#: dnsmasq.c:881
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "no se pudo accesar %s: %s"
 
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr "leyendo %s"
 
-#: dnsmasq.c:911
+#: dnsmasq.c:914
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "ningún servidor encontrado en %s, se reintentará"
@@ -1097,37 +1107,37 @@ msgstr "no se puede crear socket crudo ICMP: %s."
 msgid "DHCP packet received on %s which has no address"
 msgstr "Paquete DHCP recibido en %s sin dirección"
 
-#: dhcp.c:382
+#: dhcp.c:387
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "rango DHCP %s -- %s no coincide con máscara de subred %s"
 
-#: dhcp.c:719
+#: dhcp.c:731
 #, fuzzy, c-format
 msgid "failed to read %s:%s"
 msgstr "no se pudo leer %s:%s"
 
-#: dhcp.c:755
+#: dhcp.c:767
 #, fuzzy, c-format
 msgid "bad line at %s line %d"
 msgstr "línea errónea en %s línea %d"
 
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr "dirección IP duplicada %s en directiva dhcp-config."
 
-#: dhcp.c:873
+#: dhcp.c:885
 #, fuzzy, c-format
 msgid "duplicate IP address %s in %s."
 msgstr "dirección IP duplicada %s en %s."
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr "%s tiene más de una dirección en hostsfile, usando %s para DHCP"
 
-#: dhcp.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "dirección IP duplicada %s (%s) en directiva dhcp-config"
@@ -1156,160 +1166,160 @@ msgstr "archivo gui
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "error al escribir %s: %s (reintentar en %us)"
 
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "ningún rango de direcciónes disponible para pedido DHCP %s %s"
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr "con selector de subred"
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr "vía"
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr "paquete DHCP: transaction-id (identificación de transacción) es %u"
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr "Subred DHCP disponible: %s/%s"
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr "Rango DHCP disponible: %s -- %s"
 
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr "deshabilitado"
 
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr "dirección en uso"
 
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr "ninguna dirección disponible"
 
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr "red equivocada"
 
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr "ninguna dirección configurada"
 
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr "no sobra ningún arriendo"
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr "Clase de vendedor: %s"
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr "Clase de usuario: %s"
 
-#: rfc2131.c:683
+#: rfc2131.c:715
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "deshabilitando dirección DHCP estática %s para %s"
 
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr "arriendo desconocido"
 
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr "ignorado"
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr "no usando dirección configurada %s porque está arrendada a %s"
 
-#: rfc2131.c:746
+#: rfc2131.c:778
 #, fuzzy, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "no usando dirección configurada %s porque está en uso por el servidor o relay"
 
-#: rfc2131.c:749
+#: rfc2131.c:781
 #, fuzzy, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "no usando dirección configurada %s porque fué previamente denegada"
 
-#: rfc2131.c:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr "ningún unique-id (identificación Ãºnica)"
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
 msgstr "ID de servidor equivocada"
 
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr "dirección equivocada"
 
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr "arriendo no encontrado"
 
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr "dirección no disponible"
 
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr "arriendo estático disponible"
 
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr "dirección reservada"
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr "abandonando arriendo a %s de %s"
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr "etiquetas: %s"
 
-#: rfc2131.c:1443
+#: rfc2131.c:1478
 #, fuzzy, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr "no se puede enviar opción DHCP/BOOTP %d: no queda espacio en paquete"
 
-#: rfc2131.c:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Ignorando dominio %s para nombre de host DHCP %s"
 
-#: rfc2131.c:1617
+#: rfc2131.c:1696
 #, fuzzy, c-format
 msgid "requested options: %s"
 msgstr "opciones solicitadas: %s"
 
-#: rfc2131.c:1666
+#: rfc2131.c:1746
 #, fuzzy, c-format
 msgid "next server: %s"
 msgstr "siguiente servidor: %s"
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr "nombre de bootfile: %s"
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr "nombre de servidor: %s"
@@ -1324,24 +1334,24 @@ msgstr "no se puede crear socket netlink: %s"
 msgid "netlink returns error: %s"
 msgstr "netlink retorna error: %s"
 
-#: dbus.c:115
+#: dbus.c:151
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr "intento de fijar dirección de servidor IPv6 vía DBus - no hay soporte IPv6"
 
-#: dbus.c:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr "fijando servidores upstream desde DBus"
 
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr "no se pudo registrar un manejador de mensajes DBus"
 
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "no se puede crear socket BPF DHCP: %s"
 
-#: bpf.c:174
+#: bpf.c:178
 #, 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"
index d214628fe0f692749dbb303483268679cc7219e2..4baa6f7de1329fd1c086cba2c67452bd4ca72c2c 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: dnsmasq 2.24\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
 "PO-Revision-Date: 2005-11-28 22:05+0000\n"
 "Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -20,17 +20,17 @@ msgstr ""
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr ""
@@ -64,26 +64,26 @@ msgstr ""
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
 
-#: util.c:58
+#: util.c:56
 #, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr ""
 
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr ""
 
-#: util.c:176
+#: util.c:174
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr ""
 
-#: util.c:184
+#: util.c:182
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr ""
 
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr ""
@@ -458,7 +458,7 @@ msgid "Always perform DNS queries to all servers."
 msgstr ""
 
 #: option.c:313
-msgid "Set tag if client includes option in request."
+msgid "Set tag if client includes matching option in request."
 msgstr ""
 
 #: option.c:314
@@ -485,266 +485,274 @@ msgstr ""
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:582
+#: option.c:591
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:584
+#: option.c:593
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr ""
 
-#: option.c:753
+#: option.c:767
 msgid "bad IP address"
 msgstr ""
 
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr ""
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:983
+#: option.c:1012
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1002 tftp.c:348
+#: option.c:1031 tftp.c:348
 #, c-format
 msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1040
+#: option.c:1069
 msgid "only one dhcp-hostsfile allowed"
 msgstr ""
 
-#: option.c:1047
+#: option.c:1076
 msgid "only one dhcp-optsfile allowed"
 msgstr ""
 
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr ""
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1523
+#: option.c:1541
 msgid "bad port range"
 msgstr ""
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr ""
 
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:1819
+#: option.c:1837
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:2093
+#: option.c:2094
+msgid "invalid alias range"
+msgstr ""
+
+#: option.c:2106
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2133
+#: option.c:2146
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:2163
+#: option.c:2176
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr ""
 
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr ""
 
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr ""
 
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr ""
 
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr ""
 
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr ""
 
-#: option.c:2502 option.c:2532
+#: option.c:2515 option.c:2546
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
 "\n"
 msgstr ""
 
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:2602
+#: option.c:2616
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:2603
+#: option.c:2617
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:2614
+#: option.c:2628
 msgid "try --help"
 msgstr ""
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr ""
 
-#: option.c:2619
+#: option.c:2633
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:2688
+#: option.c:2702
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:2698
+#: option.c:2712
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:2701 network.c:721
+#: option.c:2715 network.c:730
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:2719
+#: option.c:2733
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
@@ -762,78 +770,78 @@ msgstr ""
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr ""
 
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr ""
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr ""
 
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr ""
 
-#: network.c:432
+#: network.c:443
 #, c-format
 msgid "failed to create TFTP socket: %s"
 msgstr ""
 
-#: network.c:628
+#: network.c:637
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:672
+#: network.c:681
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:687
+#: network.c:696
 msgid "unqualified"
 msgstr ""
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr ""
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr ""
 
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr ""
 
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:699
+#: network.c:708
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
@@ -1020,21 +1028,21 @@ msgstr ""
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:878
+#: dnsmasq.c:881
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:911
+#: dnsmasq.c:914
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
@@ -1069,37 +1077,37 @@ msgstr ""
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:382
+#: dhcp.c:387
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr ""
 
-#: dhcp.c:719
+#: dhcp.c:731
 #, c-format
 msgid "failed to read %s:%s"
 msgstr ""
 
-#: dhcp.c:755
+#: dhcp.c:767
 #, c-format
 msgid "bad line at %s line %d"
 msgstr ""
 
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr ""
 
-#: dhcp.c:873
+#: dhcp.c:885
 #, c-format
 msgid "duplicate IP address %s in %s."
 msgstr ""
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr ""
@@ -1128,160 +1136,160 @@ msgstr ""
 msgid "failed to write %s: %s (retry in %us)"
 msgstr ""
 
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr ""
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr ""
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr ""
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr ""
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr ""
 
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr ""
 
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr ""
 
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr ""
 
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr ""
 
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr ""
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr ""
 
-#: rfc2131.c:683
+#: rfc2131.c:715
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr ""
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:746
+#: rfc2131.c:778
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:749
+#: rfc2131.c:781
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr ""
 
-#: rfc2131.c:1443
+#: rfc2131.c:1478
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:1617
+#: rfc2131.c:1696
 #, c-format
 msgid "requested options: %s"
 msgstr ""
 
-#: rfc2131.c:1666
+#: rfc2131.c:1746
 #, c-format
 msgid "next server: %s"
 msgstr ""
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr ""
@@ -1296,24 +1304,24 @@ msgstr ""
 msgid "netlink returns error: %s"
 msgstr ""
 
-#: dbus.c:115
+#: dbus.c:151
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr ""
 
-#: dbus.c:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr ""
 
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:174
+#: bpf.c:178
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
index 31aa17884bc00a6220f5a65f8a39c21bc292993c..faa59277c713188c0cdf03979a334dc12db92848 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -2,36 +2,34 @@
 # This file is put in the public domain.
 # Lionel Tricon <lionel.tricon@free.fr>, 2005.
 # Translation completed by Gildas Le Nadan <3ntr0p13@gmail.com>
-# Last update for v2.43
 msgid ""
 msgstr ""
-"Project-Id-Version: dnsmasq 2.34\n"
+"Project-Id-Version: dnsmasq 2.47\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
-"PO-Revision-Date: 2005-10-02 19:05+0100\n"
-"Last-Translator:  Lionel Tricon <lionel.tricon@free.fr>\n"
-"Language-Team: French <traduc@traduc.org>\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
+"PO-Revision-Date: 2009-01-28 14:00+0100\n"
+"Last-Translator:  Gildas Le Nadan <3ntr0p13@gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
 #: cache.c:761
-#, fuzzy, c-format
+#, c-format
 msgid "failed to load names from %s: %s"
-msgstr "Impossible de charger les noms Ã  partir de %s : %m"
+msgstr "Impossible de charger les noms Ã  partir de %s : %s"
 
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "mauvaise adresse dans %s ligne %d"
 
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "mauvais nom dans %s ligne %d"
 
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "lecture %s - %d adresses"
@@ -51,7 +49,7 @@ msgid "time %lu"
 msgstr "horodatage %lu"
 
 #: cache.c:1019
-#, fuzzy, c-format
+#, c-format
 msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
 msgstr "taille de cache %d, %d/%d insertions dans le cache entrées non-expirées réutilisées"
 
@@ -65,26 +63,26 @@ msgstr "requ
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr "serveur %s#%d: requêtes envoyées %u, requêtes réessayées ou Ã©chouées %u"
 
-#: util.c:58
-#, fuzzy, c-format
+#: util.c:56
+#, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr "impossible d'initialiser le générateur de nombre aléatoire : %s"
 
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr "impossible d'allouer de la mémoire"
 
-#: util.c:176
-#, fuzzy, c-format
+#: util.c:174
+#, c-format
 msgid "cannot create pipe: %s"
 msgstr "Ne peut pas créer le tube %s : %s"
 
-#: util.c:184
-#, fuzzy, c-format
+#: util.c:182
+#, c-format
 msgid "failed to allocate %d bytes"
 msgstr "impossible d'allouer %d octets"
 
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr "illimité(e)"
@@ -174,8 +172,8 @@ msgstr "Sp
 msgid "Specify interface(s) NOT to listen on."
 msgstr "Spécifie la ou les interface(s) que le démon ne doit PAS traiter."
 
+#
 #: option.c:243
-#, fuzzy
 msgid "Map DHCP user class to tag."
 msgstr "Associe les classes d'utilisateurs ('user class') DHCP aux options."
 
@@ -191,13 +189,13 @@ msgstr "Associe les identifiants distants RFC3046 ('remote-id') aux options"
 msgid "Map RFC3993 subscriber-id to tag."
 msgstr "Associe les identifiants de souscripteurs RFC3993 ('subscriber-id') aux options"
 
+#
 #: option.c:247
-#, fuzzy
 msgid "Don't do DHCP for hosts with tag set."
 msgstr "Ne pas autoriser DHCP pour les machines Ã©numerées dans les options."
 
+#
 #: option.c:248
-#, fuzzy
 msgid "Force broadcast replies for hosts with tag set."
 msgstr "Forcer les réponses par 'broadcast' pour les machines Ã©numerées dans les options."
 
@@ -240,8 +238,8 @@ msgstr "Ne place pas en cache le r
 msgid "Use nameservers strictly in the order given in %s."
 msgstr "Utilise les serveurs de noms dans l'ordre donné dans %s."
 
+#
 #: option.c:258
-#, fuzzy
 msgid "Specify options to be sent to DHCP clients."
 msgstr "Options supplémentaires Ã  associer aux clients DHCP."
 
@@ -258,13 +256,13 @@ msgstr "Sp
 msgid "Maximum supported UDP packet size for EDNS.0 (defaults to %s)."
 msgstr "Taille maximale des paquets UDP supportés pour EDNS.0 (par défaut : %s)."
 
+#
 #: option.c:262
-#, fuzzy
 msgid "Log DNS queries."
 msgstr "Enregistre les requêtes DNS dans un journal d'activité."
 
+#
 #: option.c:263
-#, fuzzy
 msgid "Force the originating port for upstream DNS queries."
 msgstr "Force le port d'origine pour les requêtes vers les serveurs amonts."
 
@@ -297,8 +295,8 @@ msgstr "Sp
 msgid "Specify time-to-live in seconds for replies from /etc/hosts."
 msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
 
+#
 #: option.c:271
-#, fuzzy
 msgid "Specify time-to-live in seconds for negative caching."
 msgstr "Spécifie le TTL en secondes pour les réponses qui utilisent /etc/hosts."
 
@@ -307,8 +305,8 @@ msgstr "Sp
 msgid "Change to this user after startup. (defaults to %s)."
 msgstr "Change pour cet utilisateur après le démarrage (par défaut : %s)."
 
+#
 #: option.c:273
-#, fuzzy
 msgid "Map DHCP vendor class to tag."
 msgstr "Associe les classes de fournisseurs ('vendor class') DHCP aux options."
 
@@ -329,7 +327,7 @@ 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:278
-#, fuzzy, c-format
+#, c-format
 msgid "Specify path of PID file (defaults to %s)."
 msgstr "Spécifie un chemin pour le fichier PID (par défaut : %s)."
 
@@ -346,8 +344,8 @@ msgstr "Repond aux requ
 msgid "Specify TXT DNS record."
 msgstr "Spécifie un champ DNS TXT"
 
+#
 #: option.c:282
-#, fuzzy
 msgid "Specify PTR DNS record."
 msgstr "Spécifie un champ DNS PTR"
 
@@ -376,8 +374,8 @@ msgstr "Ne pas assurer de fonction DHCP sur cette interface, mais seulement la f
 msgid "Enable dynamic address allocation for bootp."
 msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
 
+#
 #: option.c:289
-#, fuzzy
 msgid "Map MAC address (with wildcards) to option set."
 msgstr "Associe l'adresse MAC (avec les jokers) aux options."
 
@@ -397,8 +395,8 @@ msgstr "Script 
 msgid "Read configuration from all the files in this directory."
 msgstr "Lecture de la configuration dans tous les fichiers de ce répertoire."
 
+#
 #: option.c:296
-#, fuzzy
 msgid "Log to this syslog facility or file. (defaults to DAEMON)"
 msgstr "Enregistrer les journaux d'activité dans cette facilité syslog. (défaut : DAEMON)"
 
@@ -407,7 +405,7 @@ msgid "Do not use leasefile."
 msgstr "Ne pas utiliser de fichier de baux."
 
 #: option.c:298
-#, fuzzy, c-format
+#, c-format
 msgid "Maximum number of concurrent DNS queries. (defaults to %s)"
 msgstr "Spécifie le nombre maximum de requêtes DHCP concurrentes (par défaut : %s)."
 
@@ -441,7 +439,7 @@ msgid "Allow access only to files owned by the user running dnsmasq."
 msgstr "Accès aux seuls fichiers appartenants Ã  l'utilisateur sous lequel tourne dnsmasq"
 
 #: option.c:306
-#, fuzzy, c-format
+#, c-format
 msgid "Maximum number of conncurrent TFTP transfers (defaults to %s)."
 msgstr "Spécifie le nombre maximum de transfert TFTP concurrents (défaut : %s)."
 
@@ -469,8 +467,9 @@ msgstr "Stopper la r
 msgid "Always perform DNS queries to all servers."
 msgstr "Toujours effectuer les requêtes DNS Ã  tous les serveurs."
 
+#
 #: option.c:313
-msgid "Set tag if client includes option in request."
+msgid "Set tag if client includes matching option in request."
 msgstr "Spécifie le label si le client inclus l'option dans la requête."
 
 #: option.c:314
@@ -481,8 +480,8 @@ msgstr "Utiliser des ports alternatifs pour le DHCP."
 msgid "Run lease-change script as this user."
 msgstr "Lancer le script 'lease-change' avec cet utilisateur."
 
+#
 #: option.c:316
-#, fuzzy
 msgid "Specify NAPTR DNS record."
 msgstr "Spécifie un champ DNS NAPTR."
 
@@ -492,13 +491,13 @@ msgstr "D
 
 #: option.c:318
 msgid "Use only fully qualified domain names for DHCP clients."
-msgstr ""
+msgstr "Utilise seulement les noms de domaine pleinement qualifiés pour les clients DHCP."
 
 #: option.c:319
 msgid "Specify alias name for LOCAL DNS name."
-msgstr ""
+msgstr "Spécifie un alias pour un nom DNS local."
 
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -507,209 +506,218 @@ msgstr ""
 "Usage : dnsmasq [options]\n"
 "\n"
 
-#: option.c:582
+#: option.c:591
 #, 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:584
-#, fuzzy, c-format
+#: option.c:593
+#, c-format
 msgid "Valid options are:\n"
 msgstr "Les options valides sont :\n"
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Options DHCP connues :\n"
 
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr "mauvaise valeur de 'dhcp-option'"
 
-#: option.c:753
-#, fuzzy
+#
+#: option.c:767
 msgid "bad IP address"
 msgstr "mauvaise adresse IP"
 
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr "mauvais domaine dans dhcp-option"
 
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr "dhcp-option trop long"
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr ""
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr "Une option ne pouvant Ãªtre spécifié qu'une seule fois Ã  Ã©té donnée plusieurs fois."
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr "Mot-clef ne pouvant Ãªtre répété"
 
-#: option.c:983
-#, fuzzy, c-format
+#: option.c:1012
+#, c-format
 msgid "cannot access directory %s: %s"
 msgstr "Ne peut pas lire le répertoire %s : %s"
 
-#: option.c:1002 tftp.c:348
-#, fuzzy, c-format
+#: option.c:1031 tftp.c:348
+#, c-format
 msgid "cannot access %s: %s"
 msgstr "Ne peut pas lire %s : %s"
 
-#: option.c:1040
-#, fuzzy
+#
+#: option.c:1069
 msgid "only one dhcp-hostsfile allowed"
 msgstr "une seule valeur est autorisée pour 'dhcp-hostsfile'"
 
-#: option.c:1047
-#, fuzzy
+#
+#: option.c:1076
 msgid "only one dhcp-optsfile allowed"
 msgstr "une seule valeur est autorisée pour 'dhcp-optsfile'"
 
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr "Mauvaise préference MX"
 
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr "mauvais nom MX"
 
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr "mauvaise cible MX"
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr "ne peut exécuter de script sous uClinux"
 
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr "mauvais port"
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr "association d'interface non supportée"
 
-#: option.c:1523
-#, fuzzy
+#
+#: option.c:1541
 msgid "bad port range"
 msgstr "mauvaise gamme de ports"
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr "mauvaise interface-pont"
 
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr "mauvaise plage d'adresses DHCP (dhcp-range)"
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr "une seule Ã©tiquette netid est autorisée"
 
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr "plage d'adresses DHCP incohérente"
 
-#: option.c:1819
-#, fuzzy
+#
+#: option.c:1837
 msgid "bad DHCP host name"
 msgstr "mauvais nom d'hôte DHCP"
 
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr "numéro de port invalide"
 
-#: option.c:2093
-#, fuzzy
+#
+#: option.c:2094
+msgid "invalid alias range"
+msgstr "poids invalide"
+
+#
+#: option.c:2106
 msgid "bad interface name"
 msgstr "mauvais nom d'interface"
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
-msgstr ""
+msgstr "ce CNAME existe déja"
 
-#: option.c:2133
-#, fuzzy
+#
+#: option.c:2146
 msgid "bad PTR record"
 msgstr "mauvais champ PTR"
 
-#: option.c:2163
-#, fuzzy
+#
+#: option.c:2176
 msgid "bad NAPTR record"
 msgstr "mauvais champ NAPTR"
 
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr "chaîne du champ TXT trop longue"
 
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr "mauvais champ TXT"
 
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr "mauvais champ SRV"
 
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr "mauvaise cible SRV"
 
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr "priorité invalide"
 
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr "poids invalide"
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr "trop de niveaux de récursion pour les fichiers dans %s"
 
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "Ne peut pas lire %s : %s"
 
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr "il manque \""
 
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr "mauvaise option"
 
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr "paramètre en trop"
 
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr "paramètre manquant"
 
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr "erreur"
 
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s Ã  la ligne %d de %%s"
 
-#: option.c:2502 option.c:2532
-#, fuzzy, c-format
+#: option.c:2515 option.c:2546
+#, c-format
 msgid "read %s"
 msgstr "Lecture de %s"
 
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Version de Dnsmasq %s  %s\n"
 
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -718,60 +726,60 @@ msgstr ""
 "Options Ã  la compilation %s\n"
 "\n"
 
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Ce logiciel est fourni sans AUCUNE GARANTIE.\n"
 
-#: option.c:2602
+#: option.c:2616
 #, 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:2603
-#, fuzzy, c-format
+#: option.c:2617
+#, 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:2614
+#: option.c:2628
 msgid "try --help"
 msgstr "essayez avec --help"
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr "essayez avec -w"
 
-#: option.c:2619
-#, fuzzy, c-format
+#: option.c:2633
+#, c-format
 msgid "bad command line options: %s"
 msgstr "mauvaises options en ligne de commande : %s."
 
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "ne peut pas obtenir le nom de la machine : %s"
 
-#: option.c:2688
+#: option.c:2702
 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:2698
+#: option.c:2712
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "un fichier resolv.conf (et un seul) est nécessaire pour y récuperer le nom de domaine."
 
-#: option.c:2701 network.c:721
-#, fuzzy, c-format
+#: option.c:2715 network.c:730
+#, c-format
 msgid "failed to read %s: %s"
-msgstr "impossible de lire %s : %m"
+msgstr "impossible de lire %s : %s"
 
-#: option.c:2719
+#: option.c:2733
 #, c-format
 msgid "no search directive found in %s"
 msgstr "pas de directive de recherche trouvée dans %s"
 
-#: option.c:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
-msgstr ""
+msgstr "un domaine par défaut doit Ãªtre spécifié lorsque l'option --dhcp-fqdn est utilisée"
 
 #: forward.c:405
 #, c-format
@@ -783,88 +791,88 @@ msgid "possible DNS-rebind attack detected"
 msgstr "détection d'une possible attaque de type DNS-rebind"
 
 #: network.c:45
-#, fuzzy, c-format
+#, c-format
 msgid "unknown interface %s in bridge-interface"
-msgstr "interface %s inconnue"
+msgstr "interface %s inconnue spécifiée comme interface de pont"
 
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr "impossible de créer une socket de lecture : %s"
 
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr "impossible d'activer les options IPV6 sur la socket de lecture : %s"
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr "impossible de lier la socket de lecture pour %s : %s"
 
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr "impossible de lire sur la socket : %s"
 
-#: network.c:432
-#, fuzzy, c-format
+#: network.c:443
+#, c-format
 msgid "failed to create TFTP socket: %s"
-msgstr "impossible de créer une socket de lecture : %s"
+msgstr "impossible de créer une socket TFTP : %s"
 
-#: network.c:628
-#, fuzzy, c-format
+#: network.c:637
+#, c-format
 msgid "failed to bind server socket for %s: %s"
-msgstr "impossible de lier la socket de lecture pour %s : %s"
+msgstr "impossible de lier la socket de serveur pour %s : %s"
 
-#: network.c:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignore le serveur de nom %s - interface locale"
 
-#: network.c:672
-#, fuzzy, c-format
+#: network.c:681
+#, 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:687
+#: network.c:696
 msgid "unqualified"
 msgstr "non-qualifié(e)"
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr "noms"
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr "défaut"
 
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr "domaine"
 
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "utilise les adresses locales seulement pour %s %s"
 
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "utilise le serveur de nom %s#%d pour %s %s"
 
-#: network.c:699
-#, fuzzy, c-format
+#: network.c:708
+#, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "utilise le serveur de nom %s#%d (via %s)"
 
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "utilise le serveur de nom %s#%d"
 
+#
 #: dnsmasq.c:136
-#, fuzzy
 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"
 
@@ -916,7 +924,7 @@ msgid "cannot fork into background: %s"
 msgstr "Ne peut se lancer en tâche de fond : %s"
 
 #: dnsmasq.c:443
-#, fuzzy, c-format
+#, c-format
 msgid "started, version %s DNS disabled"
 msgstr "démarrage avec le DNS désactivé (version %s)"
 
@@ -944,7 +952,7 @@ msgid "DBus support enabled: bus connection pending"
 msgstr "Support DBus autorisé : connexion au bus en attente"
 
 #: dnsmasq.c:462
-#, fuzzy, c-format
+#, c-format
 msgid "warning: failed to change owner of %s: %s"
 msgstr "Impossible de changer pour l'utilisateur %s : %s"
 
@@ -961,8 +969,8 @@ msgstr "attention : l'interface %s n'existe pas actuellement"
 msgid "warning: ignoring resolv-file flag because no-resolv is set"
 msgstr "attention : l'option Â« resolv-file Â» sera ignorée car Â« no-resolv Â» a Ã©té spécifié"
 
+#
 #: dnsmasq.c:479
-#, fuzzy
 msgid "warning: no upstream servers configured"
 msgstr "attention : aucun serveur amont n'est configuré"
 
@@ -985,10 +993,10 @@ msgstr "DHCP, plage d'adresses %s -- %s, dur
 msgid "root is "
 msgstr "root est"
 
+#
 #: dnsmasq.c:510
-#, fuzzy
 msgid "enabled"
-msgstr "désactivé"
+msgstr "activé"
 
 #: dnsmasq.c:512
 msgid "secure mode"
@@ -1004,32 +1012,32 @@ msgid "connected to system DBus"
 msgstr "connecté au systeme DBus"
 
 #: dnsmasq.c:742
-#, fuzzy, c-format
+#, c-format
 msgid "failed to create helper: %s"
 msgstr "impossible de créer le 'helper' : %s"
 
 #: dnsmasq.c:745
-#, fuzzy, c-format
+#, c-format
 msgid "setting capabilities failed: %s"
-msgstr "attention : impossible de configurer la capacité %m"
+msgstr "impossible de configurer la capacité %s"
 
 #: dnsmasq.c:749
-#, fuzzy, c-format
+#, c-format
 msgid "failed to change user-id to %s: %s"
 msgstr "Impossible de changer l'identifiant utilisateur pour %s : %s"
 
 #: dnsmasq.c:754
-#, fuzzy, c-format
+#, c-format
 msgid "failed to change group-id to %s: %s"
 msgstr "Impossible de changer l'identifiant de groupe pour %s : %s"
 
 #: dnsmasq.c:757
-#, fuzzy, c-format
+#, c-format
 msgid "failed to open pidfile %s: %s"
 msgstr "impossible de lire le fichier de PID %s : %s"
 
 #: dnsmasq.c:760
-#, fuzzy, c-format
+#, c-format
 msgid "cannot open %s: %s"
 msgstr "Ne peut pas lire %s : %s"
 
@@ -1044,26 +1052,26 @@ msgid "child process exited with status %d"
 msgstr "Le processus fils s'est terminé avec le statut %d"
 
 #: dnsmasq.c:819
-#, fuzzy, c-format
+#, c-format
 msgid "failed to execute %s: %s"
 msgstr "impossible d'exécuter Ã  %s : %s"
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr "sortie sur réception du signal SIGTERM"
 
-#: dnsmasq.c:878
-#, fuzzy, c-format
+#: dnsmasq.c:881
+#, c-format
 msgid "failed to access %s: %s"
-msgstr "impossible d'accéder Ã  %s : %m"
+msgstr "impossible d'accéder Ã  %s : %s"
 
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr "Lecture de %s"
 
-#: dnsmasq.c:911
-#, fuzzy, c-format
+#: dnsmasq.c:914
+#, c-format
 msgid "no servers found in %s, will retry"
 msgstr "aucun serveur trouvé dans %s, va réessayer"
 
@@ -1078,7 +1086,7 @@ msgid "failed to set options on DHCP socket: %s"
 msgstr "impossible d'appliquer les options sur la socket DHCP : %s"
 
 #: dhcp.c:68
-#, fuzzy, c-format
+#, c-format
 msgid "failed to set SO_REUSE{ADDR|PORT} on DHCP socket: %s"
 msgstr "impossible de déclarer SO_REUSE{ADDR|PORT} sur la socket DHCP : %s"
 
@@ -1097,43 +1105,43 @@ msgstr "ne peut cr
 msgid "DHCP packet received on %s which has no address"
 msgstr "Paquet DHCP reçu sur %s qui n'a pas d'adresse"
 
-#: dhcp.c:382
+#: dhcp.c:387
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "La plage d'adresses DHCP %s -- %s n'est pas cohérente avec le masque de réseau %s"
 
-#: dhcp.c:719
-#, fuzzy, c-format
+#: dhcp.c:731
+#, c-format
 msgid "failed to read %s:%s"
 msgstr "impossible de lire %s : %s"
 
-#: dhcp.c:755
-#, fuzzy, c-format
+#: dhcp.c:767
+#, c-format
 msgid "bad line at %s line %d"
 msgstr "mauvaise ligne dans %s ligne %d"
 
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr "adresse IP %s dupliquée dans la directive dhcp-config."
 
-#: dhcp.c:873
-#, fuzzy, c-format
+#: dhcp.c:885
+#, c-format
 msgid "duplicate IP address %s in %s."
 msgstr "adresse IP %s dupliquée dans %s."
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr "%s a plus d'une adresse dans le fichier d'hôte, utilisation de %s pour le DHCP."
 
-#: dhcp.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "adresse IP %s (%s) dupliquée dans la directive dhcp-config."
 
 #: lease.c:58
-#, fuzzy, c-format
+#, c-format
 msgid "cannot open or create lease file %s: %s"
 msgstr "ne peut ouvrir ou créer le fichiers de baux %s : %s"
 
@@ -1142,7 +1150,7 @@ msgid "too many stored leases"
 msgstr "beaucoup trop de baux enregistrés"
 
 #: lease.c:125
-#, fuzzy, c-format
+#, c-format
 msgid "cannot run lease-init script %s: %s"
 msgstr "Ne peut pas exécuter le script lease-init %s : %s"
 
@@ -1152,197 +1160,197 @@ msgid "lease-init script returned exit code %s"
 msgstr "le script lease-init a retourné le code %s"
 
 #: lease.c:238
-#, fuzzy, c-format
+#, c-format
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "impossible de lire %s : %s (prochain essai dans %us)"
 
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "pas de plage d'adresse disponible pour la requête DHCP %s %s"
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr "avec sélecteur de sous-reseau"
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr "par l'intermédiaire de"
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr "paquet DHCP : l'identifiant de transaction ('transaction-id') est %u"
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr "sous-réseaux DHCP disponibles : %s/%s"
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr "la gamme DHCP disponible est : %s -- %s"
 
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr "désactivé"
 
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr "adresse déjà utilisée"
 
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr "pas d'adresse disponible"
 
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr "mauvais réseau"
 
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr "pas d'adresse configurée"
 
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr "plus aucun bail disponible"
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr "Classe de vendeur ('Vendor Class') : %s"
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr "Classe d'utilisateur : %s"
 
-#: rfc2131.c:683
-#, fuzzy, c-format
+#: rfc2131.c:715
+#, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "désactive l'adresse statique DHCP %s pour %s"
 
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr "bail inconnu"
 
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr "ignoré"
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr "L'adresse statique %s ne sera pas utilisée car un bail est déjà attribué Ã  %s"
 
-#: rfc2131.c:746
+#: rfc2131.c:778
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr "L'adresse statique %s ne sera pas utilisée car elle est utilisée par le serveur ou un relai"
 
-#: rfc2131.c:749
+#: rfc2131.c:781
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr "L'adresse statique %s ne sera pas utilisée car elle a préalablement Ã©té refusée"
 
-#: rfc2131.c:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr "pas d'identifiant unique"
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
-msgstr ""
+msgstr "mauvais identifiant de serveur"
 
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr "mauvaise adresse"
 
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr "bail non trouvé"
 
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr "adresse non disponible"
 
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr "bail statique disponible"
 
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr "adresse reservée"
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
-msgstr ""
+msgstr "abandon du bail de %s pour %s"
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr "options: %s"
 
-#: rfc2131.c:1443
-#, fuzzy, c-format
+#: rfc2131.c:1478
+#, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
-msgstr "Impossible d'envoyer l'option DHCP %d : pas assez d'espace dans le paquet"
+msgstr "Impossible d'envoyer l'option DHCP/BOOTP %d : pas assez d'espace dans le paquet"
 
-#: rfc2131.c:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Le domaine %s est ignoré pour l'hôte DHCP %s"
 
-#: rfc2131.c:1617
-#, fuzzy, c-format
+#: rfc2131.c:1696
+#, c-format
 msgid "requested options: %s"
 msgstr "options demandées : %s"
 
-#: rfc2131.c:1666
-#, fuzzy, c-format
+#: rfc2131.c:1746
+#, c-format
 msgid "next server: %s"
 msgstr "serveur suivant : %s"
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr "nom de fichier 'bootfile' : %s"
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr "nom du serveur : %s"
 
 #: netlink.c:63
-#, fuzzy, c-format
+#, c-format
 msgid "cannot create netlink socket: %s"
 msgstr "ne peux lier une socket netlink : %s"
 
 #: netlink.c:230
-#, fuzzy, c-format
+#, c-format
 msgid "netlink returns error: %s"
 msgstr "Erreur netlink : %s"
 
-#: dbus.c:115
+#: dbus.c:151
 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:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr "configuration des serveurs amonts Ã  partir de DBus"
 
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr "ne peut enregistrer une routine de traitement des messages DBus"
 
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "impossible de créer une socket BPF pour DHCP : %s"
 
-#: bpf.c:174
-#, fuzzy, c-format
+#: bpf.c:178
+#, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "requête DHCP pour un type de matériel non supporté (%d) reçue sur %s"
 
@@ -1361,9 +1369,9 @@ msgid "TFTP sent %s to %s"
 msgstr "TFTP envoyé %s Ã  %s"
 
 #: tftp.c:294
-#, fuzzy, c-format
+#, c-format
 msgid "file %s not found"
-msgstr "bail non trouvé"
+msgstr "fichier %s non trouvé"
 
 #: tftp.c:405
 #, c-format
@@ -1371,7 +1379,7 @@ msgid "TFTP error %d %s received from %s"
 msgstr "TFTP erreur %d %s reçu de %s"
 
 #: tftp.c:436
-#, fuzzy, c-format
+#, c-format
 msgid "TFTP failed sending %s to %s"
 msgstr "TFTP : impossible d'envoyer %s Ã  %s"
 
@@ -1389,7 +1397,7 @@ msgstr "trace perdue : %s"
 msgid "FAILED to start up"
 msgstr "IMPOSSIBLE de démarrer"
 
-#, fuzzy
+#
 #~ msgid "failed to load %s: %s"
 #~ msgstr "impossible de charger %s : %m"
 
@@ -1402,7 +1410,7 @@ msgstr "IMPOSSIBLE de d
 #~ msgid "ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
 #~ msgstr "L'intégration DHCP ISC n'est pas disponible : activez HAVE_ISC_READER dans src/config.h"
 
-#, fuzzy
+#
 #~ msgid "illegal domain %s in dhcp-config directive."
 #~ msgstr "domaine %s dupliqué dans la directive dhcp-config."
 
@@ -1415,7 +1423,7 @@ msgstr "IMPOSSIBLE de d
 #~ msgid "Read leases at startup, but never write the lease file."
 #~ msgstr "Lecture des baux au démarrage, mais aucune Ã©criture de fichier de baux"
 
-#, fuzzy
+#
 #~ msgid "read %s - %d hosts"
 #~ msgstr "lecture %s - %d hôtes"
 
@@ -1437,7 +1445,7 @@ msgstr "IMPOSSIBLE de d
 #~ msgid "failed to read %s:%m"
 #~ msgstr "impossible de lire %s : %m"
 
-#, fuzzy
+#
 #~ msgid "cannot send encapsulated option %d: no space left in wrapper"
 #~ msgstr "Impossible d'envoyer l'option DHCP %d : pas assez d'espace dans le paquet"
 
index f9dde4240545d2e5f80c6edbbdc0b5ba377d95da..6727a131c56be2825a52038b4a065efb46a0f70d 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: dnsmasq 2.24\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
 "PO-Revision-Date: 2005-10-07 11:45+0100\n"
 "Last-Translator: Salman AS <sas@salman.or.id>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -21,19 +21,19 @@ msgid "failed to load names from %s: %s"
 msgstr "gagal memuat nama-nama dari %s: %m"
 
 # OK
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, fuzzy, c-format
 msgid "bad address at %s line %d"
 msgstr "kesalahan nama pada %s baris %d"
 
 # OK
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "kesalahan nama pada %s baris %d"
 
 # OK
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "membaca %s - %d alamat"
@@ -71,30 +71,30 @@ msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
 
 # OK
-#: util.c:58
+#: util.c:56
 #, fuzzy, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr "gagal mendengarkan di socket: %s"
 
 # OK
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr "tidak bisa mendapatkan memory"
 
 # OK
-#: util.c:176
+#: util.c:174
 #, fuzzy, c-format
 msgid "cannot create pipe: %s"
 msgstr "tidak bisa membaca %s: %s"
 
 # OK
-#: util.c:184
+#: util.c:182
 #, fuzzy, c-format
 msgid "failed to allocate %d bytes"
 msgstr "gagal memuat %S: %m"
 
 # OK
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr "tak terbatas"
@@ -541,7 +541,7 @@ msgid "Always perform DNS queries to all servers."
 msgstr ""
 
 #: option.c:313
-msgid "Set tag if client includes option in request."
+msgid "Set tag if client includes matching option in request."
 msgstr ""
 
 #: option.c:314
@@ -571,7 +571,7 @@ msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
 # OK
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -581,242 +581,252 @@ msgstr ""
 "\n"
 
 # OK
-#: option.c:582
+#: option.c:591
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Gunakan pilihan pendek saja pada perintah baris.\n"
 
 # OK
-#: option.c:584
+#: option.c:593
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Pilihan yang boleh adalah:\n"
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
 # OK
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr "dhcp-option salah"
 
 # OK
-#: option.c:753
+#: option.c:767
 #, fuzzy
 msgid "bad IP address"
 msgstr "membaca %s - %d alamat"
 
 # OK
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr "domain dalam dhcp-option salah"
 
 # OK
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr "dhcp-option terlalu panjang"
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr ""
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr ""
 
 # OK
-#: option.c:983
+#: option.c:1012
 #, fuzzy, c-format
 msgid "cannot access directory %s: %s"
 msgstr "tidak bisa membaca %s: %s"
 
 # OK
-#: option.c:1002 tftp.c:348
+#: option.c:1031 tftp.c:348
 #, fuzzy, c-format
 msgid "cannot access %s: %s"
 msgstr "tidak bisa membaca %s: %s"
 
-#: option.c:1040
+#: option.c:1069
 msgid "only one dhcp-hostsfile allowed"
 msgstr ""
 
-#: option.c:1047
+#: option.c:1076
 msgid "only one dhcp-optsfile allowed"
 msgstr ""
 
 # OK
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr "kesukaan MX salah"
 
 # OK
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr "nama MX salah"
 
 # OK
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr "target MX salah"
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
 # OK
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr "port salah"
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr ""
 
 # OK
-#: option.c:1523
+#: option.c:1541
 #, fuzzy
 msgid "bad port range"
 msgstr "port salah"
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr ""
 
 # OK
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr "dhcp-range salah"
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr ""
 
 # OK
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr "jangkauan DHCP tidak konsisten"
 
 # OK
-#: option.c:1819
+#: option.c:1837
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "nama MX salah"
 
 # OK
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr "nomor port tidak benar"
 
 # OK
-#: option.c:2093
+#: option.c:2094
+#, fuzzy
+msgid "invalid alias range"
+msgstr "weight tidak benar"
+
+# OK
+#: option.c:2106
 #, fuzzy
 msgid "bad interface name"
 msgstr "nama MX salah"
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
 msgstr ""
 
 # OK
-#: option.c:2133
+#: option.c:2146
 #, fuzzy
 msgid "bad PTR record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:2163
+#: option.c:2176
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr "string rekord TXT terlalu panjang"
 
 # OK
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr "rekord TXT salah"
 
 # OK
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr "rekord SRV salah"
 
 # OK
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr "target SRV salah"
 
 # OK
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr "prioritas tidak benar"
 
 # OK
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr "weight tidak benar"
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr ""
 
 # OK
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "tidak bisa membaca %s: %s"
 
 # OK
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr "kurang \""
 
 # OK
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr "pilihan salah"
 
 # OK
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr "parameter berlebihan"
 
 # OK
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr "parameter kurang"
 
 # OK
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr "kesalahan"
 
 # OK
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s pada baris %d dari %%s"
 
 # OK
-#: option.c:2502 option.c:2532
+#: option.c:2515 option.c:2546
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "membaca %s"
 
 # OK
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq versi %s  %s\n"
 
 # OK
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -826,66 +836,66 @@ msgstr ""
 "\n"
 
 # OK
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n"
 
 # OK
-#: option.c:2602
+#: option.c:2616
 #, 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:2603
+#: option.c:2617
 #, 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:2614
+#: option.c:2628
 msgid "try --help"
 msgstr ""
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr ""
 
 # OK
-#: option.c:2619
+#: option.c:2633
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "pilihan baris perintah salah: %s."
 
 # OK
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "tidak bisa mendapatkan host-name: %s"
 
 # OK
-#: option.c:2688
+#: option.c:2702
 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:2698
+#: option.c:2712
 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:2701 network.c:721
+#: option.c:2715 network.c:730
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "gagal membaca %s: %m"
 
 # OK
-#: option.c:2719
+#: option.c:2733
 #, c-format
 msgid "no search directive found in %s"
 msgstr "tidak ditemukan direktif search di %s"
 
-#: option.c:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
@@ -906,89 +916,89 @@ msgid "unknown interface %s in bridge-interface"
 msgstr "antarmuka tidak dikenal %s"
 
 # OK
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr "gagal membuat socket: %s "
 
 # OK
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr "gagal menyetel IPV6 pada socket: %s"
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
 
 # OK
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr "gagal mendengarkan di socket: %s"
 
 # OK
-#: network.c:432
+#: network.c:443
 #, fuzzy, c-format
 msgid "failed to create TFTP socket: %s"
 msgstr "gagal membuat socket: %s "
 
-#: network.c:628
+#: network.c:637
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
 
 # OK
-#: network.c:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "mengabaikan nameserver %s - antarmuka lokal"
 
 # OK
-#: network.c:672
+#: network.c:681
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "mengabaikan nameserver %s - tak dapat membuat/mem-bind socket: %m"
 
 # OK
-#: network.c:687
+#: network.c:696
 msgid "unqualified"
 msgstr "tidak memenuhi syarat"
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr ""
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr ""
 
 # OK
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr "domain"
 
 # OK
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "menggunakan alamat lokal saja untuk %s %s"
 
 # OK
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "menggunakan nameserver %s#%d untuk %s %s"
 
 # OK
-#: network.c:699
+#: network.c:708
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "menggunakan nameserver %s#%d"
 
 # OK
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "menggunakan nameserver %s#%d"
@@ -1205,24 +1215,24 @@ msgstr ""
 msgid "failed to execute %s: %s"
 msgstr "gagal mengakses %s: %m"
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr "keluar karena menerima SIGTERM"
 
 # OK
-#: dnsmasq.c:878
+#: dnsmasq.c:881
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "gagal mengakses %s: %m"
 
 # OK
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr "membaca %s"
 
 # OK
-#: dnsmasq.c:911
+#: dnsmasq.c:914
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "tidak ditemukan direktif search di %s"
@@ -1263,42 +1273,42 @@ msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
 # OK
-#: dhcp.c:382
+#: dhcp.c:387
 #, 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:719
+#: dhcp.c:731
 #, fuzzy, c-format
 msgid "failed to read %s:%s"
 msgstr "gagal membaca %s: %m"
 
 # OK
-#: dhcp.c:755
+#: dhcp.c:767
 #, fuzzy, c-format
 msgid "bad line at %s line %d"
 msgstr "kesalahan nama pada %s baris %d"
 
 # OK
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr "alamat IP kembar %s dalam direktif dhcp-config"
 
 # OK
-#: dhcp.c:873
+#: dhcp.c:885
 #, fuzzy, c-format
 msgid "duplicate IP address %s in %s."
 msgstr "alamat IP kembar %s dalam direktif dhcp-config"
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
 # OK
-#: dhcp.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "alamat IP kembar %s (%s) dalam direktif dhcp-config"
@@ -1332,178 +1342,178 @@ msgid "failed to write %s: %s (retry in %us)"
 msgstr "gagal membaca %s: %m"
 
 # OK
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, 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:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr "dengan pemilih subnet"
 
 # OK
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr "lewat"
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr ""
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr ""
 
 # OK
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr "di disable"
 
 # OK
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr "alamat telah digunakan"
 
 # OK
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr "tak ada alamat yang tersedia"
 
 # OK
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr "jaringan yang salah"
 
 # OK
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr "tak ada alamat yang disetel"
 
 # OK
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr "tak ada lease yang tersisa"
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr ""
 
 # OK
-#: rfc2131.c:683
+#: rfc2131.c:715
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "men-disable alamat statik DHCP %s"
 
 # OK
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr "lease tidak diketahui"
 
 # OK
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr "diabaikan"
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:746
+#: rfc2131.c:778
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:749
+#: rfc2131.c:781
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
 msgstr ""
 
 # OK
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr "alamat salah"
 
 # OK
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr "lease tak ditemukan"
 
 # OK
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr "alamat tak tersedia"
 
 # OK
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr "lease statik tak tersedia"
 
 # OK
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr "alamat telah dipesan"
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr ""
 
-#: rfc2131.c:1443
+#: rfc2131.c:1478
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
 # OK
-#: rfc2131.c:1617
+#: rfc2131.c:1696
 #, fuzzy, c-format
 msgid "requested options: %s"
 msgstr "pilihan-pilihan saat kompilasi: %s"
 
 # OK
-#: rfc2131.c:1666
+#: rfc2131.c:1746
 #, fuzzy, c-format
 msgid "next server: %s"
 msgstr "DBus error: %s"
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr ""
@@ -1521,28 +1531,28 @@ msgid "netlink returns error: %s"
 msgstr "DBus error: %s"
 
 # OK
-#: dbus.c:115
+#: dbus.c:151
 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:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr "menyetel server-server di atas dengan DBus"
 
 # OK
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr "tidak bisa mendaftar sebuah DBus message handler"
 
 # OK
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "tidak dapat membuat socket DHCP BPF: %s"
 
 # OK
-#: bpf.c:174
+#: bpf.c:178
 #, 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"
index 13d060edd9eda71e59985a28d41ac78b71f1c588..0eaf7e8264687b8cbf34be9ebf8c778ea47d2466 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: dnsmasq 2.32\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
 "PO-Revision-Date: 2006-05-22 11:09+0100\n"
 "Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -20,17 +20,17 @@ msgstr ""
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr ""
@@ -64,26 +64,26 @@ msgstr ""
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
 
-#: util.c:58
+#: util.c:56
 #, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr ""
 
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr ""
 
-#: util.c:176
+#: util.c:174
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr ""
 
-#: util.c:184
+#: util.c:182
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr ""
 
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr ""
@@ -458,7 +458,7 @@ msgid "Always perform DNS queries to all servers."
 msgstr ""
 
 #: option.c:313
-msgid "Set tag if client includes option in request."
+msgid "Set tag if client includes matching option in request."
 msgstr ""
 
 #: option.c:314
@@ -485,266 +485,274 @@ msgstr ""
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:582
+#: option.c:591
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:584
+#: option.c:593
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr ""
 
-#: option.c:753
+#: option.c:767
 msgid "bad IP address"
 msgstr ""
 
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr ""
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:983
+#: option.c:1012
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1002 tftp.c:348
+#: option.c:1031 tftp.c:348
 #, c-format
 msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1040
+#: option.c:1069
 msgid "only one dhcp-hostsfile allowed"
 msgstr ""
 
-#: option.c:1047
+#: option.c:1076
 msgid "only one dhcp-optsfile allowed"
 msgstr ""
 
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr ""
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1523
+#: option.c:1541
 msgid "bad port range"
 msgstr ""
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr ""
 
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:1819
+#: option.c:1837
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:2093
+#: option.c:2094
+msgid "invalid alias range"
+msgstr ""
+
+#: option.c:2106
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2133
+#: option.c:2146
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:2163
+#: option.c:2176
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr ""
 
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr ""
 
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr ""
 
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr ""
 
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr ""
 
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr ""
 
-#: option.c:2502 option.c:2532
+#: option.c:2515 option.c:2546
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
 "\n"
 msgstr ""
 
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:2602
+#: option.c:2616
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:2603
+#: option.c:2617
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:2614
+#: option.c:2628
 msgid "try --help"
 msgstr ""
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr ""
 
-#: option.c:2619
+#: option.c:2633
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:2688
+#: option.c:2702
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:2698
+#: option.c:2712
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:2701 network.c:721
+#: option.c:2715 network.c:730
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:2719
+#: option.c:2733
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
@@ -762,78 +770,78 @@ msgstr ""
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr ""
 
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr ""
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr ""
 
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr ""
 
-#: network.c:432
+#: network.c:443
 #, c-format
 msgid "failed to create TFTP socket: %s"
 msgstr ""
 
-#: network.c:628
+#: network.c:637
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:672
+#: network.c:681
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:687
+#: network.c:696
 msgid "unqualified"
 msgstr ""
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr ""
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr ""
 
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr ""
 
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:699
+#: network.c:708
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
@@ -1020,21 +1028,21 @@ msgstr ""
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:878
+#: dnsmasq.c:881
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:911
+#: dnsmasq.c:914
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
@@ -1069,37 +1077,37 @@ msgstr ""
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:382
+#: dhcp.c:387
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr ""
 
-#: dhcp.c:719
+#: dhcp.c:731
 #, c-format
 msgid "failed to read %s:%s"
 msgstr ""
 
-#: dhcp.c:755
+#: dhcp.c:767
 #, c-format
 msgid "bad line at %s line %d"
 msgstr ""
 
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr ""
 
-#: dhcp.c:873
+#: dhcp.c:885
 #, c-format
 msgid "duplicate IP address %s in %s."
 msgstr ""
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr ""
@@ -1128,160 +1136,160 @@ msgstr ""
 msgid "failed to write %s: %s (retry in %us)"
 msgstr ""
 
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr ""
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr ""
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr ""
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr ""
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr ""
 
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr ""
 
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr ""
 
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr ""
 
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr ""
 
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr ""
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr ""
 
-#: rfc2131.c:683
+#: rfc2131.c:715
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr ""
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:746
+#: rfc2131.c:778
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:749
+#: rfc2131.c:781
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr ""
 
-#: rfc2131.c:1443
+#: rfc2131.c:1478
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:1617
+#: rfc2131.c:1696
 #, c-format
 msgid "requested options: %s"
 msgstr ""
 
-#: rfc2131.c:1666
+#: rfc2131.c:1746
 #, c-format
 msgid "next server: %s"
 msgstr ""
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr ""
@@ -1296,24 +1304,24 @@ msgstr ""
 msgid "netlink returns error: %s"
 msgstr ""
 
-#: dbus.c:115
+#: dbus.c:151
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr ""
 
-#: dbus.c:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr ""
 
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:174
+#: bpf.c:178
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
index 3bb5863d1abfaa097dd74f4278ee17688c48e1e1..1795221d86d763a00311e5c801d26797449ff72c 100644 (file)
--- a/po/no.po
+++ b/po/no.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: dnsmasq 2.25\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
 "PO-Revision-Date: 2006-01-11 17:39+0000\n"
 "Last-Translator: Jan Erik Askildt <jeaskildt@gmail.com>\n"
 "Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n"
@@ -22,17 +22,17 @@ msgstr ""
 msgid "failed to load names from %s: %s"
 msgstr "feilet Ã¥ laste navn fra %s: %m"
 
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "dÃ¥rlig adresse ved %s linje %d"
 
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "dÃ¥rlig navn ved %s linje %d"
 
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "les %s - %d adresser"
@@ -66,26 +66,26 @@ msgstr ""
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
 
-#: util.c:58
+#: util.c:56
 #, fuzzy, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr "feilet Ã¥ lytte pÃ¥ socket: %s"
 
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr "kunne ikke fÃ¥ minne"
 
-#: util.c:176
+#: util.c:174
 #, fuzzy, c-format
 msgid "cannot create pipe: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: util.c:184
+#: util.c:182
 #, fuzzy, c-format
 msgid "failed to allocate %d bytes"
 msgstr "feilet Ã¥ laste %s: %m"
 
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr "uendelig"
@@ -471,7 +471,7 @@ msgid "Always perform DNS queries to all servers."
 msgstr ""
 
 #: option.c:313
-msgid "Set tag if client includes option in request."
+msgid "Set tag if client includes matching option in request."
 msgstr ""
 
 #: option.c:314
@@ -499,7 +499,7 @@ msgstr ""
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -508,207 +508,216 @@ msgstr ""
 "Bruk: dnsmasq [opsjoner]\n"
 "\n"
 
-#: option.c:582
+#: option.c:591
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr "Bruk korte opsjoner kun pÃ¥ kommandolinjen.\n"
 
-#: option.c:584
+#: option.c:593
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "Gyldige opsjoner er :\n"
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr "dÃ¥rlig dhcp-opsjon"
 
-#: option.c:753
+#: option.c:767
 #, fuzzy
 msgid "bad IP address"
 msgstr "les %s - %d adresser"
 
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr "dÃ¥rlig domene i dhcp-opsjon"
 
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr "dhcp-opsjon for lang"
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr ""
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:983
+#: option.c:1012
 #, fuzzy, c-format
 msgid "cannot access directory %s: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: option.c:1002 tftp.c:348
+#: option.c:1031 tftp.c:348
 #, fuzzy, c-format
 msgid "cannot access %s: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: option.c:1040
+#: option.c:1069
 msgid "only one dhcp-hostsfile allowed"
 msgstr ""
 
-#: option.c:1047
+#: option.c:1076
 msgid "only one dhcp-optsfile allowed"
 msgstr ""
 
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr "dÃ¥rlig MX preferanse"
 
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr "dÃ¥rlig MX navn"
 
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr "dÃ¥rlig MX mÃ¥l"
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr "dÃ¥rlig port"
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1523
+#: option.c:1541
 #, fuzzy
 msgid "bad port range"
 msgstr "dÃ¥rlig port"
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr "dÃ¥rlig dhcp-omrÃ¥de"
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr ""
 
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr "ikke konsistent DHCP omrÃ¥de"
 
-#: option.c:1819
+#: option.c:1837
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "dÃ¥rlig MX navn"
 
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr "ugyldig portnummer"
 
-#: option.c:2093
+#: option.c:2094
+#, fuzzy
+msgid "invalid alias range"
+msgstr "ugyldig vekt"
+
+#: option.c:2106
 #, fuzzy
 msgid "bad interface name"
 msgstr "dÃ¥rlig MX navn"
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2133
+#: option.c:2146
 #, fuzzy
 msgid "bad PTR record"
 msgstr "dÃ¥rlig SRV post"
 
-#: option.c:2163
+#: option.c:2176
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "dÃ¥rlig SRV post"
 
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr "TXT post streng for lang"
 
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr "dÃ¥rlig TXT post"
 
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr "dÃ¥rlig SRV post"
 
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr "dÃ¥rlig SRV mÃ¥l"
 
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr "ugyldig prioritet"
 
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr "ugyldig vekt"
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr ""
 
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "kan ikke lese %s: %s"
 
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr "mangler \""
 
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr "dÃ¥rlig opsjon"
 
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr "overflødig parameter"
 
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr "mangler parameter"
 
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr "feil"
 
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s pÃ¥ linje %d av %%s"
 
-#: option.c:2502 option.c:2532
+#: option.c:2515 option.c:2546
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "leser %s"
 
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq versjon %s %s\n"
 
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -717,58 +726,58 @@ msgstr ""
 "Kompileringsopsjoner %s\n"
 "\n"
 
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n"
 
-#: option.c:2602
+#: option.c:2616
 #, 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:2603
+#: option.c:2617
 #, fuzzy, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr "under vilkÃ¥rene gitt i GNU General Public License, versjon 2.\n"
 
-#: option.c:2614
+#: option.c:2628
 msgid "try --help"
 msgstr ""
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr ""
 
-#: option.c:2619
+#: option.c:2633
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "dÃ¥rlige kommandlinje opsjoner: %s."
 
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "klarer ikke Ã¥ fÃ¥ vertsnavn: %s"
 
-#: option.c:2688
+#: option.c:2702
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr "kun en resolv.conf fil tillat i no-poll modus."
 
-#: option.c:2698
+#: option.c:2712
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr "mÃ¥ ha nøyaktig en resolv.conf Ã¥ lese domene fra."
 
-#: option.c:2701 network.c:721
+#: option.c:2715 network.c:730
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "feilet Ã¥ lese %s: %m"
 
-#: option.c:2719
+#: option.c:2733
 #, c-format
 msgid "no search directive found in %s"
 msgstr "intet søke direktiv funnet i %s"
 
-#: option.c:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
@@ -786,78 +795,78 @@ msgstr ""
 msgid "unknown interface %s in bridge-interface"
 msgstr "ukjent tilknytning (interface) %s"
 
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr "feilet Ã¥ lage lytte socket: %s"
 
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr "feilet Ã¥ sette IPv6 opsjoner pÃ¥ lytte socket: %s"
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr "feilet Ã¥ binde lytte socket for %s: %s"
 
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr "feilet Ã¥ lytte pÃ¥ socket: %s"
 
-#: network.c:432
+#: network.c:443
 #, fuzzy, c-format
 msgid "failed to create TFTP socket: %s"
 msgstr "feilet Ã¥ lage lytte socket: %s"
 
-#: network.c:628
+#: network.c:637
 #, fuzzy, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "feilet Ã¥ binde lytte socket for %s: %s"
 
-#: network.c:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorerer navnetjener %s - lokal tilknytning"
 
-#: network.c:672
+#: network.c:681
 #, fuzzy, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr "ignorerer navnetjener %s - kan ikke lage/dinde socket: %m"
 
-#: network.c:687
+#: network.c:696
 msgid "unqualified"
 msgstr "ikke kvalifisert"
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr ""
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr ""
 
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr "domene"
 
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "benytter lokale adresser kun for %s %s"
 
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "benytter navnetjener %s#%d for %s %s"
 
-#: network.c:699
+#: network.c:708
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "benytter navnetjener %s#%d"
 
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "benytter navnetjener %s#%d"
@@ -1047,21 +1056,21 @@ msgstr ""
 msgid "failed to execute %s: %s"
 msgstr "feilet Ã¥ fÃ¥ tilgang til %s: %m"
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr "avslutter etter mottak av SIGTERM"
 
-#: dnsmasq.c:878
+#: dnsmasq.c:881
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "feilet Ã¥ fÃ¥ tilgang til %s: %m"
 
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr "leser %s"
 
-#: dnsmasq.c:911
+#: dnsmasq.c:914
 #, fuzzy, c-format
 msgid "no servers found in %s, will retry"
 msgstr "intet søke direktiv funnet i %s"
@@ -1096,37 +1105,37 @@ msgstr "kan ikke lage ICMP raw socket: %s"
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:382
+#: dhcp.c:387
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr "DHCP omrÃ¥de %s -- %s er ikke konsistent med nettmaske %s"
 
-#: dhcp.c:719
+#: dhcp.c:731
 #, fuzzy, c-format
 msgid "failed to read %s:%s"
 msgstr "feilet Ã¥ lese %s: %m"
 
-#: dhcp.c:755
+#: dhcp.c:767
 #, c-format
 msgid "bad line at %s line %d"
 msgstr "dÃ¥rlig linje ved %s linje %d"
 
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
 
-#: dhcp.c:873
+#: dhcp.c:885
 #, fuzzy, c-format
 msgid "duplicate IP address %s in %s."
 msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "dubliserte IP adresser i %s (%s) i dhcp-config direktiv"
@@ -1155,160 +1164,160 @@ msgstr ""
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "feilet Ã¥ lese %s: %m"
 
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr "ingen adresse omrÃ¥de tilgjengelig for DHCP krav %s %s"
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr "med subnet velger"
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr "via"
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr ""
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr "deaktivert"
 
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr "adresse i bruk"
 
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr "ingen adresse tilgjengelig"
 
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr "galt nettverk"
 
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr "ingen adresse konfigurert"
 
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr "ingen leier igjen"
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr ""
 
-#: rfc2131.c:683
+#: rfc2131.c:715
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "deaktiverer DHCP statisk adresse %s"
 
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr "ukjent leie"
 
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr "oversett"
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:746
+#: rfc2131.c:778
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:749
+#: rfc2131.c:781
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr "gal adresse"
 
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr "leie ikke funnet"
 
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr "adresse ikke tilgjengelig"
 
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr "statisk leie tilgjengelig"
 
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr "adresse reservert"
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr ""
 
-#: rfc2131.c:1443
+#: rfc2131.c:1478
 #, 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:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:1617
+#: rfc2131.c:1696
 #, fuzzy, c-format
 msgid "requested options: %s"
 msgstr "kompilerings opsjoner: %s"
 
-#: rfc2131.c:1666
+#: rfc2131.c:1746
 #, fuzzy, c-format
 msgid "next server: %s"
 msgstr "DBus feil: %s"
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr ""
@@ -1323,24 +1332,24 @@ msgstr "kan ikke binde netlink socket: %s"
 msgid "netlink returns error: %s"
 msgstr "DBus feil: %s"
 
-#: dbus.c:115
+#: dbus.c:151
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr "forsøk pÃ¥ Ã¥ sette en IPv6 tjener adresse via DBus - ingen IPv6 støtte"
 
-#: dbus.c:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr "setter oppstrøms tjener fra DBus"
 
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr "kunne ikke registrere en DBus meldingshÃ¥ndterer"
 
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "kan ikke lage DHCP BPF socket: %s"
 
-#: bpf.c:174
+#: bpf.c:178
 #, fuzzy, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr "DHCP krav for ikke støttet maskinvare type (%d) mottatt pÃ¥ %s"
index 3fb420b5e7adbf24a1df9ac82c455ffa986b8936..dd664a09f0c3ad94df73d441d90d4cb47d022378 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,17 +1,16 @@
-# translation of pl.po to Polski
 # Polish translations for dnsmasq package.
 # This file is put in the public domain.
 #
 # Tomasz Sochañski <nerdhero@gmail.com>, 2005.
-# Jan Psota <jasiu@belsznica.pl>, 2008.
+# Jan Psota <jasiu@belsznica.pl>, 2008, 2009.
 msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
-"PO-Revision-Date: 2008-10-20 23:37+0200\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
+"PO-Revision-Date: 2009-02-01 01:14+0100\n"
 "Last-Translator: Jan Psota <jasiu@belsznica.pl>\n"
-"Language-Team: Polski <pl@li.org>\n"
+"Language-Team: polski <pl@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -23,17 +22,17 @@ msgstr ""
 msgid "failed to load names from %s: %s"
 msgstr "nie potrafiê wczytaæ nazw z %s: %s"
 
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "b³êdny adres w pliku %s, w linii %d"
 
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "b³êdna nazwa w pliku %s, w linii %d"
 
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "przeczytano %s - %d adresów"
@@ -67,26 +66,26 @@ msgstr "%u zapyta
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr "serwer %s#%d: %u zapytañ wys³anych, %u ponowionych lub nieudanych"
 
-#: util.c:58
+#: util.c:56
 #, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr "brak mo¿liwo¶ci u¿ycia generatora liczb losowych: %s"
 
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr "nie mo¿na dostaæ pamiêci"
 
-#: util.c:176
+#: util.c:174
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr "b³±d podczas próby utworzenia potoku: %s"
 
-#: util.c:184
+#: util.c:182
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr "niemo¿liwo¶æ przydzielenia %d bajtów pamiêci"
 
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr "nieskoñczona"
@@ -461,8 +460,8 @@ msgid "Always perform DNS queries to all servers."
 msgstr "Jednoczesne odpytywanie wszystkich serwerów nadrzêdnych; klientowi przekazywana jest pierwsza odpowied¼."
 
 #: option.c:313
-msgid "Set tag if client includes option in request."
-msgstr "Przyporz±dkowanie znacznika je¿eli klient przy¶le opcjê o wskazanym numerze."
+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:314
 msgid "Use alternative ports for DHCP."
@@ -488,7 +487,7 @@ msgstr "Przechowywanie w serwerze DNS dnsmasq-a tylko w pe
 msgid "Specify alias name for LOCAL DNS name."
 msgstr "Wskazanie synonimu nazwy komputera lokalnego - znanego z /etc/hosts albo z DHCP."
 
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -497,201 +496,209 @@ msgstr ""
 "U¿ycie: dnsmasq [opcje]\n"
 "\n"
 
-#: option.c:582
+#: option.c:591
 #, 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:584
+#: option.c:593
 #, c-format
 msgid "Valid options are:\n"
 msgstr "Dostêpne opcje:\n"
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr "Znane opcje DHCP:\n"
 
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr "b³±d w dhcp-option"
 
-#: option.c:753
+#: option.c:767
 msgid "bad IP address"
 msgstr "z³y adres IP"
 
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr "nieprawid³owa nazwa domeny w dhcp-option"
 
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr "zbyt d³uga dhcp-option (>255 znaków)"
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr "niedopuszczalne dhcp-match"
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr "wielokrotne u¿ycie opcji niedozwolone (pojawi³a siê wcze¶niej w linii poleceñ)"
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr "wielokrotne u¿ycie opcji niedozwolone (pojawi³a siê wsze¶niej w pliku konfiguracyjnym)"
 
-#: option.c:983
+#: option.c:1012
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr "brak dostêpu do katalogu %s: %s"
 
-#: option.c:1002 tftp.c:348
+#: option.c:1031 tftp.c:348
 #, c-format
 msgid "cannot access %s: %s"
 msgstr "brak dostêpu do %s: %s"
 
-#: option.c:1040
+#: option.c:1069
 msgid "only one dhcp-hostsfile allowed"
 msgstr "mo¿na wskazaæ tylko jeden plik dhcp-hostsfile"
 
-#: option.c:1047
+#: option.c:1076
 msgid "only one dhcp-optsfile allowed"
 msgstr "mo¿na wskazaæ tylko jeden plik dhcp-optsfile"
 
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr "nieprawid³owa warto¶æ preferencji MX"
 
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr "nieprawid³owa nazwa MX"
 
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr "nieprawid³owa warto¶æ celu MX"
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr "w uClinuksie nie ma mo¿liwo¶ci uruchamiania skryptów"
 
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr "nieprawid³owy numer portu"
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr "nie ma mo¿liwo¶ci dowi±zywania do interfejsu"
 
-#: option.c:1523
+#: option.c:1541
 msgid "bad port range"
 msgstr "nieprawid³owy zakres numerów portów"
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr "nieprawid³owa nazwa urz±dzenia w bridge-interface"
 
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr "nieprawid³owy zakres dhcp-range"
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr "mo¿na wskazaæ tylko jeden znacznik sieci"
 
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr "niespójny zakres adresów DHCP"
 
-#: option.c:1819
+#: option.c:1837
 msgid "bad DHCP host name"
 msgstr "niedopuszczalna nazwa komputera w dhcp-host"
 
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr "nieprawid³owy numer portu"
 
-#: option.c:2093
+#: option.c:2094
+msgid "invalid alias range"
+msgstr "nieprawid³owy zakres adresów w --alias"
+
+#: option.c:2106
 msgid "bad interface name"
 msgstr "nieprawid³owa nazwa interfejsu"
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
 msgstr "powtórzona CNAME"
 
-#: option.c:2133
+#: option.c:2146
 msgid "bad PTR record"
 msgstr "nieprawid³owy zapis rekordu PTR"
 
-#: option.c:2163
+#: option.c:2176
 msgid "bad NAPTR record"
 msgstr "nieprawid³owy zapis rekordu NAPTR"
 
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr "zbyt d³ugi rekord TXT"
 
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr "nieprawid³owy zapis rekordu TXT"
 
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr "nieprawid³owy zapis rekordu SRV"
 
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr "nieprawid³owa warto¶æ celu SRV"
 
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr "nieprawid³owy priorytet"
 
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr "nieprawid³owa waga"
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr "zbyt du¿e zag³êbienie plików w %s"
 
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "b³±d odczytu z pliku %s: %s"
 
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr "brakuje \""
 
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr "nieprawid³owa opcja"
 
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr "nadwy¿kowy parametr"
 
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr "brak parametru"
 
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr "b³±d"
 
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s w linii %d pliku %%s"
 
-#: option.c:2502 option.c:2532
+#: option.c:2515 option.c:2546
 #, c-format
 msgid "read %s"
 msgstr "przeczyta³em %s"
 
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "Dnsmasq, wersja %s  %s\n"
 
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -700,58 +707,58 @@ msgstr ""
 "Wkompilowane opcje %s\n"
 "\n"
 
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "To oprogramowanie nie daje Â¿adnych gwarancji.\n"
 
-#: option.c:2602
+#: option.c:2616
 #, 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:2603
+#: option.c:2617
 #, 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:2614
+#: option.c:2628
 msgid "try --help"
 msgstr "spróbuj: --help"
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr "spróbuj: -w"
 
-#: option.c:2619
+#: option.c:2633
 #, c-format
 msgid "bad command line options: %s"
 msgstr "nieprawid³owa opcja w linii poleceñ %s"
 
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "nie mo¿na pobraæ nazwy hosta: %s"
 
-#: option.c:2688
+#: option.c:2702
 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:2698
+#: option.c:2712
 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:2701 network.c:721
+#: option.c:2715 network.c:730
 #, c-format
 msgid "failed to read %s: %s"
 msgstr "nie uda³o siê odczytaæ %s: %s"
 
-#: option.c:2719
+#: option.c:2733
 #, c-format
 msgid "no search directive found in %s"
 msgstr "brak wytycznych wyszukiwania w %s"
 
-#: option.c:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr "w przypadku u¿ywania --dhcp-fqdn trzeba wskazaæ domy¶ln± domenê"
 
@@ -769,78 +776,78 @@ msgstr "prawdopodobnie wykryto atak DNS-rebind"
 msgid "unknown interface %s in bridge-interface"
 msgstr "nieznany interfejs %s w bridge-u"
 
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr "b³±d podczas tworzenia gniazda: %s"
 
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr "b³±d ustawiania opcji IPV6 na nas³uchuj±cym gnie¼dzie: %s"
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr "b³±d przy przyznawaniu nazwy gniazdu %s: %s"
 
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr "b³±d przy w³±czaniu nas³uchu na gnie¼dzie: %s"
 
-#: network.c:432
+#: network.c:443
 #, c-format
 msgid "failed to create TFTP socket: %s"
 msgstr "nie powiod³o siê otwieranie gniazda dla us³ugi TFTP: %s"
 
-#: network.c:628
+#: network.c:637
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr "b³±d przy przyznawaniu nazwy gniazdu serwera %s: %s"
 
-#: network.c:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorowanie serwera nazw %s - interfejs lokalny"
 
-#: network.c:672
+#: network.c:681
 #, 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:687
+#: network.c:696
 msgid "unqualified"
 msgstr "niekwalifikowane(-a)"
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr "nazwy"
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr "domy¶lne"
 
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr "domena"
 
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "u¿ywam adresów lokalnych tylko dla %s %s"
 
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "u¿ywam serwera nazw %s#%d dla %s %s"
 
-#: network.c:699
+#: network.c:708
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "u¿ywam serwera nazw %s#%d (przez %s)"
 
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "u¿ywam serwera nazw %s#%d"
@@ -1027,21 +1034,21 @@ msgstr "proces potomny zako
 msgid "failed to execute %s: %s"
 msgstr "nie uda³o siê uruchomiæ %s: %s"
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr "zakoñczy³em dzia³anie z powodu odebrania SIGTERM"
 
-#: dnsmasq.c:878
+#: dnsmasq.c:881
 #, c-format
 msgid "failed to access %s: %s"
 msgstr "brak dostêpu do %s: %s"
 
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr "czytanie %s"
 
-#: dnsmasq.c:911
+#: dnsmasq.c:914
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr "w %s nie znalaz³em serwerów, spróbujê ponownie pó¼niej"
@@ -1076,37 +1083,37 @@ msgstr "nie uda
 msgid "DHCP packet received on %s which has no address"
 msgstr "¿±danie DHCP odebrano na interfejsie %s, który nie ma adresu"
 
-#: dhcp.c:382
+#: dhcp.c:387
 #, 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:719
+#: dhcp.c:731
 #, c-format
 msgid "failed to read %s:%s"
 msgstr "b³±d odczytu %s: %s"
 
-#: dhcp.c:755
+#: dhcp.c:767
 #, c-format
 msgid "bad line at %s line %d"
 msgstr "z³a zawarto¶æ pliku %s, w linii %d"
 
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr "powtórzony adres IP (%s) w parametrze dhcp-config"
 
-#: dhcp.c:873
+#: dhcp.c:885
 #, c-format
 msgid "duplicate IP address %s in %s."
 msgstr "powtórzony adres IP (%s) w pliku %s"
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, 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.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "powtórzenie adresu IP %s (%s) w opcji dhcp-config"
@@ -1135,160 +1142,160 @@ msgstr "skrypt zako
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "b³±d zapisu do %s: %s (spróbujê ponownie za %us)"
 
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, 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:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr "z wyborem podsieci"
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr "przez"
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr "pakiet DHCP, id transakcji: %u"
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr "Dostêpna podsieæ DHCP: %s/%s"
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr "Zakres adresów na u¿ytek DHCP: %s -- %s"
 
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr "wy³±czony(a)"
 
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr "adres jest w u¿yciu"
 
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr "brak dostêpnego adresu"
 
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr "nieprawid³owa sieæ"
 
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr "brak skonfigurowanego adresu"
 
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr "brak wolnych dzier¿aw"
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr "Typ klienta: %s"
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr "Klasa u¿ytkownika: %s"
 
-#: rfc2131.c:683
+#: rfc2131.c:715
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "wy³±czam statyczne przypisanie adresu %s dla %s"
 
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr "nieznana dzier¿awa"
 
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr "ignorujê"
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, 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:746
+#: rfc2131.c:778
 #, 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:749
+#: rfc2131.c:781
 #, 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:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr "brak unikalnego id"
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
 msgstr "nieprawid³owy identyfikator serwera (server-ID)"
 
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr "b³êdny adres"
 
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr "dzier¿awa nieznaleziona"
 
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr "adres niedostêpny"
 
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr "dostêpna statyczna dzier¿awa"
 
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr "adres zarezerwowany"
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr "porzucam przypisanie do %s nazwy %s"
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr "znaczniki: %s"
 
-#: rfc2131.c:1443
+#: rfc2131.c:1478
 #, 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:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr "Nie uwzglêdniam czê¶ci domenowej (%s) dla komputera %s"
 
-#: rfc2131.c:1617
+#: rfc2131.c:1696
 #, c-format
 msgid "requested options: %s"
 msgstr "wskazane opcje: %s"
 
-#: rfc2131.c:1666
+#: rfc2131.c:1746
 #, c-format
 msgid "next server: %s"
 msgstr "nastêpny serwer: %s"
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr "nazwa pliku bootowania: %s"
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr "nazwa serwera: %s"
@@ -1303,24 +1310,24 @@ msgstr "nie potrafi
 msgid "netlink returns error: %s"
 msgstr "wyst±pi³ b³±d w po³±czeniu netlink %s"
 
-#: dbus.c:115
+#: dbus.c:151
 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:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr "ustawiam adresy serwerów nadrzêdnych na podstawie informacji odebranych z DBus"
 
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr "nie mo¿na zarejestrowaæ uchwytu DBus"
 
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "nie potrafiê utworzyæ gniazda DHCP BPF: %s"
 
-#: bpf.c:174
+#: bpf.c:178
 #, 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"
index 4e944041c15e2875d0b4f4ffb505d24023a2abe6..dbc9202a96c9568b226c974a2fdd6983878fc4c4 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: dnsmasq 2.26\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
 "PO-Revision-Date: 2006-01-16 20:42+0000\n"
 "Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
 "Language-Team: Portuguese <ldp-br@bazar.conectiva.com.br>\n"
@@ -20,17 +20,17 @@ msgstr ""
 msgid "failed to load names from %s: %s"
 msgstr ""
 
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, c-format
 msgid "bad address at %s line %d"
 msgstr ""
 
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr ""
 
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr ""
@@ -64,26 +64,26 @@ msgstr ""
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
 
-#: util.c:58
+#: util.c:56
 #, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr ""
 
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr ""
 
-#: util.c:176
+#: util.c:174
 #, c-format
 msgid "cannot create pipe: %s"
 msgstr ""
 
-#: util.c:184
+#: util.c:182
 #, c-format
 msgid "failed to allocate %d bytes"
 msgstr ""
 
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr ""
@@ -458,7 +458,7 @@ msgid "Always perform DNS queries to all servers."
 msgstr ""
 
 #: option.c:313
-msgid "Set tag if client includes option in request."
+msgid "Set tag if client includes matching option in request."
 msgstr ""
 
 #: option.c:314
@@ -485,266 +485,274 @@ msgstr ""
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
 "\n"
 msgstr ""
 
-#: option.c:582
+#: option.c:591
 #, c-format
 msgid "Use short options only on the command line.\n"
 msgstr ""
 
-#: option.c:584
+#: option.c:593
 #, c-format
 msgid "Valid options are:\n"
 msgstr ""
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr ""
 
-#: option.c:753
+#: option.c:767
 msgid "bad IP address"
 msgstr ""
 
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr ""
 
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr ""
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr ""
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:983
+#: option.c:1012
 #, c-format
 msgid "cannot access directory %s: %s"
 msgstr ""
 
-#: option.c:1002 tftp.c:348
+#: option.c:1031 tftp.c:348
 #, c-format
 msgid "cannot access %s: %s"
 msgstr ""
 
-#: option.c:1040
+#: option.c:1069
 msgid "only one dhcp-hostsfile allowed"
 msgstr ""
 
-#: option.c:1047
+#: option.c:1076
 msgid "only one dhcp-optsfile allowed"
 msgstr ""
 
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr ""
 
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr ""
 
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr ""
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr ""
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1523
+#: option.c:1541
 msgid "bad port range"
 msgstr ""
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr ""
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr ""
 
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr ""
 
-#: option.c:1819
+#: option.c:1837
 msgid "bad DHCP host name"
 msgstr ""
 
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr ""
 
-#: option.c:2093
+#: option.c:2094
+msgid "invalid alias range"
+msgstr ""
+
+#: option.c:2106
 msgid "bad interface name"
 msgstr ""
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2133
+#: option.c:2146
 msgid "bad PTR record"
 msgstr ""
 
-#: option.c:2163
+#: option.c:2176
 msgid "bad NAPTR record"
 msgstr ""
 
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr ""
 
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr ""
 
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr ""
 
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr ""
 
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr ""
 
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr ""
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr ""
 
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr ""
 
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr ""
 
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr ""
 
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr ""
 
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr ""
 
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr ""
 
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr ""
 
-#: option.c:2502 option.c:2532
+#: option.c:2515 option.c:2546
 #, c-format
 msgid "read %s"
 msgstr ""
 
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr ""
 
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
 "\n"
 msgstr ""
 
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr ""
 
-#: option.c:2602
+#: option.c:2616
 #, c-format
 msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
 msgstr ""
 
-#: option.c:2603
+#: option.c:2617
 #, c-format
 msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
 msgstr ""
 
-#: option.c:2614
+#: option.c:2628
 msgid "try --help"
 msgstr ""
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr ""
 
-#: option.c:2619
+#: option.c:2633
 #, c-format
 msgid "bad command line options: %s"
 msgstr ""
 
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr ""
 
-#: option.c:2688
+#: option.c:2702
 msgid "only one resolv.conf file allowed in no-poll mode."
 msgstr ""
 
-#: option.c:2698
+#: option.c:2712
 msgid "must have exactly one resolv.conf to read domain from."
 msgstr ""
 
-#: option.c:2701 network.c:721
+#: option.c:2715 network.c:730
 #, c-format
 msgid "failed to read %s: %s"
 msgstr ""
 
-#: option.c:2719
+#: option.c:2733
 #, c-format
 msgid "no search directive found in %s"
 msgstr ""
 
-#: option.c:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
@@ -762,78 +770,78 @@ msgstr ""
 msgid "unknown interface %s in bridge-interface"
 msgstr ""
 
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr ""
 
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr ""
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr ""
 
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr ""
 
-#: network.c:432
+#: network.c:443
 #, c-format
 msgid "failed to create TFTP socket: %s"
 msgstr ""
 
-#: network.c:628
+#: network.c:637
 #, c-format
 msgid "failed to bind server socket for %s: %s"
 msgstr ""
 
-#: network.c:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr ""
 
-#: network.c:672
+#: network.c:681
 #, c-format
 msgid "ignoring nameserver %s - cannot make/bind socket: %s"
 msgstr ""
 
-#: network.c:687
+#: network.c:696
 msgid "unqualified"
 msgstr ""
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr ""
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr ""
 
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr ""
 
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr ""
 
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr ""
 
-#: network.c:699
+#: network.c:708
 #, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr ""
 
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr ""
@@ -1020,21 +1028,21 @@ msgstr ""
 msgid "failed to execute %s: %s"
 msgstr ""
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr ""
 
-#: dnsmasq.c:878
+#: dnsmasq.c:881
 #, c-format
 msgid "failed to access %s: %s"
 msgstr ""
 
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr ""
 
-#: dnsmasq.c:911
+#: dnsmasq.c:914
 #, c-format
 msgid "no servers found in %s, will retry"
 msgstr ""
@@ -1069,37 +1077,37 @@ msgstr ""
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:382
+#: dhcp.c:387
 #, c-format
 msgid "DHCP range %s -- %s is not consistent with netmask %s"
 msgstr ""
 
-#: dhcp.c:719
+#: dhcp.c:731
 #, c-format
 msgid "failed to read %s:%s"
 msgstr ""
 
-#: dhcp.c:755
+#: dhcp.c:767
 #, c-format
 msgid "bad line at %s line %d"
 msgstr ""
 
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr ""
 
-#: dhcp.c:873
+#: dhcp.c:885
 #, c-format
 msgid "duplicate IP address %s in %s."
 msgstr ""
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr ""
@@ -1128,160 +1136,160 @@ msgstr ""
 msgid "failed to write %s: %s (retry in %us)"
 msgstr ""
 
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, c-format
 msgid "no address range available for DHCP request %s %s"
 msgstr ""
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr ""
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr ""
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr ""
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr ""
 
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr ""
 
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr ""
 
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr ""
 
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr ""
 
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr ""
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr ""
 
-#: rfc2131.c:683
+#: rfc2131.c:715
 #, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr ""
 
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr ""
 
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr ""
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:746
+#: rfc2131.c:778
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:749
+#: rfc2131.c:781
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr ""
 
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr ""
 
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr ""
 
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr ""
 
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr ""
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr ""
 
-#: rfc2131.c:1443
+#: rfc2131.c:1478
 #, c-format
 msgid "cannot send DHCP/BOOTP option %d: no space left in packet"
 msgstr ""
 
-#: rfc2131.c:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:1617
+#: rfc2131.c:1696
 #, c-format
 msgid "requested options: %s"
 msgstr ""
 
-#: rfc2131.c:1666
+#: rfc2131.c:1746
 #, c-format
 msgid "next server: %s"
 msgstr ""
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr ""
@@ -1296,24 +1304,24 @@ msgstr ""
 msgid "netlink returns error: %s"
 msgstr ""
 
-#: dbus.c:115
+#: dbus.c:151
 msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
 msgstr ""
 
-#: dbus.c:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr ""
 
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr ""
 
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr ""
 
-#: bpf.c:174
+#: bpf.c:178
 #, c-format
 msgid "DHCP request for unsupported hardware type (%d) received on %s"
 msgstr ""
index 6dfba766d590047430ed0fbe0b21fc6e5df61e98..2374bca39d9a9ac32dd4800689308d69af5ea5d4 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: dnsmasq 2.24\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-13 20:23+0000\n"
+"POT-Creation-Date: 2009-02-02 14:07+0000\n"
 "PO-Revision-Date: 2005-11-22 16:46+0000\n"
 "Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -20,17 +20,17 @@ msgstr ""
 msgid "failed to load names from %s: %s"
 msgstr "încărcarea numelor din %s: %m a eÅŸuat"
 
-#: cache.c:795 dhcp.c:768
+#: cache.c:795 dhcp.c:780
 #, c-format
 msgid "bad address at %s line %d"
 msgstr "adresă greÅŸită Ã®n %s, linia %d"
 
-#: cache.c:850 dhcp.c:782
+#: cache.c:850 dhcp.c:794
 #, c-format
 msgid "bad name at %s line %d"
 msgstr "nume greÅŸit Ã®n %s linia %d"
 
-#: cache.c:857 dhcp.c:848
+#: cache.c:857 dhcp.c:860
 #, c-format
 msgid "read %s - %d addresses"
 msgstr "citesc %s - %d adrese"
@@ -64,26 +64,26 @@ msgstr ""
 msgid "server %s#%d: queries sent %u, retried or failed %u"
 msgstr ""
 
-#: util.c:58
+#: util.c:56
 #, fuzzy, c-format
 msgid "failed to seed the random number generator: %s"
 msgstr "ascultarea pe socket a eÅŸuat: %s"
 
-#: util.c:166
+#: util.c:164
 msgid "could not get memory"
 msgstr "nu am putut aloca memorie"
 
-#: util.c:176
+#: util.c:174
 #, fuzzy, c-format
 msgid "cannot create pipe: %s"
 msgstr "nu pot citi %s: %s"
 
-#: util.c:184
+#: util.c:182
 #, fuzzy, c-format
 msgid "failed to allocate %d bytes"
 msgstr "nu pot Ã®ncărca %s: %n"
 
-#: util.c:289
+#: util.c:287
 #, c-format
 msgid "infinite"
 msgstr "infinit"
@@ -469,7 +469,7 @@ msgid "Always perform DNS queries to all servers."
 msgstr ""
 
 #: option.c:313
-msgid "Set tag if client includes option in request."
+msgid "Set tag if client includes matching option in request."
 msgstr ""
 
 #: option.c:314
@@ -497,7 +497,7 @@ msgstr ""
 msgid "Specify alias name for LOCAL DNS name."
 msgstr ""
 
-#: option.c:580
+#: option.c:589
 #, c-format
 msgid ""
 "Usage: dnsmasq [options]\n"
@@ -506,207 +506,216 @@ msgstr ""
 "Utilizare: dnsmasq [opÅ£iuni]\n"
 "\n"
 
-#: option.c:582
+#: option.c:591
 #, 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:584
+#: option.c:593
 #, fuzzy, c-format
 msgid "Valid options are:\n"
 msgstr "OpÅ£iunile valide sunt:\n"
 
-#: option.c:624
+#: option.c:633
 #, c-format
 msgid "Known DHCP options:\n"
 msgstr ""
 
-#: option.c:697
+#: option.c:710
 msgid "bad dhcp-option"
 msgstr "dhcp-option invalid"
 
-#: option.c:753
+#: option.c:767
 #, fuzzy
 msgid "bad IP address"
 msgstr "citesc %s - %d adrese"
 
-#: option.c:851
+#: option.c:865
 msgid "bad domain in dhcp-option"
 msgstr "domeniu DNS invalid Ã®n declaraÅ£ia dhcp-option"
 
-#: option.c:909
+#: option.c:923
 msgid "dhcp-option too long"
 msgstr "declararea dhcp-option este prea lungă"
 
-#: option.c:938
+#: option.c:932
+msgid "illegal dhcp-match"
+msgstr ""
+
+#: option.c:967
 msgid "illegal repeated flag"
 msgstr ""
 
-#: option.c:946
+#: option.c:975
 msgid "illegal repeated keyword"
 msgstr ""
 
-#: option.c:983
+#: option.c:1012
 #, fuzzy, c-format
 msgid "cannot access directory %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: option.c:1002 tftp.c:348
+#: option.c:1031 tftp.c:348
 #, fuzzy, c-format
 msgid "cannot access %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: option.c:1040
+#: option.c:1069
 msgid "only one dhcp-hostsfile allowed"
 msgstr ""
 
-#: option.c:1047
+#: option.c:1076
 msgid "only one dhcp-optsfile allowed"
 msgstr ""
 
-#: option.c:1091
+#: option.c:1120
 msgid "bad MX preference"
 msgstr "preferinţă MX invalidă"
 
-#: option.c:1095
+#: option.c:1124
 msgid "bad MX name"
 msgstr "nume MX invalid"
 
-#: option.c:1109
+#: option.c:1138
 msgid "bad MX target"
 msgstr "Å£intă MX invalidă"
 
-#: option.c:1120
+#: option.c:1149
 msgid "cannot run scripts under uClinux"
 msgstr ""
 
-#: option.c:1352 option.c:1360
+#: option.c:1375 option.c:1379
 msgid "bad port"
 msgstr "port invalid"
 
-#: option.c:1380 option.c:1405
+#: option.c:1398 option.c:1423
 msgid "interface binding not supported"
 msgstr ""
 
-#: option.c:1523
+#: option.c:1541
 #, fuzzy
 msgid "bad port range"
 msgstr "port invalid"
 
-#: option.c:1540
+#: option.c:1558
 msgid "bad bridge-interface"
 msgstr ""
 
-#: option.c:1581
+#: option.c:1599
 msgid "bad dhcp-range"
 msgstr "dhcp-range invalid"
 
-#: option.c:1607
+#: option.c:1625
 msgid "only one netid tag allowed"
 msgstr ""
 
-#: option.c:1647
+#: option.c:1665
 msgid "inconsistent DHCP range"
 msgstr "domeniu DHCP inconsistent"
 
-#: option.c:1819
+#: option.c:1837
 #, fuzzy
 msgid "bad DHCP host name"
 msgstr "nume MX invalid"
 
-#: option.c:1998 option.c:2270
+#: option.c:2012 option.c:2283
 msgid "invalid port number"
 msgstr "număr de port invalid"
 
-#: option.c:2093
+#: option.c:2094
+#, fuzzy
+msgid "invalid alias range"
+msgstr "pondere invalidă"
+
+#: option.c:2106
 #, fuzzy
 msgid "bad interface name"
 msgstr "nume MX invalid"
 
-#: option.c:2116
+#: option.c:2129
 msgid "duplicate CNAME"
 msgstr ""
 
-#: option.c:2133
+#: option.c:2146
 #, fuzzy
 msgid "bad PTR record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:2163
+#: option.c:2176
 #, fuzzy
 msgid "bad NAPTR record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:2189
+#: option.c:2202
 msgid "TXT record string too long"
 msgstr "ÅŸirul de caractere pentru Ã®nregistrarea TXT este prea lung"
 
-#: option.c:2193
+#: option.c:2206
 msgid "bad TXT record"
 msgstr "înregistrare TXT invalidă"
 
-#: option.c:2253
+#: option.c:2266
 msgid "bad SRV record"
 msgstr "înregistrare SRV invalidă"
 
-#: option.c:2262
+#: option.c:2275
 msgid "bad SRV target"
 msgstr "Å£intă SRV invalidă"
 
-#: option.c:2277
+#: option.c:2290
 msgid "invalid priority"
 msgstr "prioritate invalidă"
 
-#: option.c:2284
+#: option.c:2297
 msgid "invalid weight"
 msgstr "pondere invalidă"
 
-#: option.c:2320
+#: option.c:2333
 #, c-format
 msgid "files nested too deep in %s"
 msgstr ""
 
-#: option.c:2328 tftp.c:503
+#: option.c:2341 tftp.c:503
 #, c-format
 msgid "cannot read %s: %s"
 msgstr "nu pot citi %s: %s"
 
-#: option.c:2389
+#: option.c:2402
 msgid "missing \""
 msgstr "lipseÅŸte \""
 
-#: option.c:2436
+#: option.c:2449
 msgid "bad option"
 msgstr "opÅ£iune invalidă"
 
-#: option.c:2438
+#: option.c:2451
 msgid "extraneous parameter"
 msgstr "parametru nerecunoscut"
 
-#: option.c:2440
+#: option.c:2453
 msgid "missing parameter"
 msgstr "parametru lipsa"
 
-#: option.c:2448
+#: option.c:2461
 msgid "error"
 msgstr "eroare"
 
-#: option.c:2454
+#: option.c:2467
 #, c-format
 msgid "%s at line %d of %%s"
 msgstr "%s la linia %d din %%s"
 
-#: option.c:2502 option.c:2532
+#: option.c:2515 option.c:2546
 #, fuzzy, c-format
 msgid "read %s"
 msgstr "citesc %s"
 
-#: option.c:2599
+#: option.c:2613
 #, c-format
 msgid "Dnsmasq version %s  %s\n"
 msgstr "dnsmasq versiunea %s  %s\n"
 
-#: option.c:2600
+#: option.c:2614
 #, c-format
 msgid ""
 "Compile time options %s\n"
@@ -715,58 +724,58 @@ msgstr ""
 "OpÅ£iuni cu care a fost compilat %s\n"
 "\n"
 
-#: option.c:2601
+#: option.c:2615
 #, c-format
 msgid "This software comes with ABSOLUTELY NO WARRANTY.\n"
 msgstr "Acest program vine FÄ‚RÄ‚ NICI O GARANÅ¢IE.\n"
 
-#: option.c:2602
+#: option.c:2616
 #, 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:2603
+#: option.c:2617
 #, 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:2614
+#: option.c:2628
 msgid "try --help"
 msgstr ""
 
-#: option.c:2616
+#: option.c:2630
 msgid "try -w"
 msgstr ""
 
-#: option.c:2619
+#: option.c:2633
 #, fuzzy, c-format
 msgid "bad command line options: %s"
 msgstr "opÅ£iuni Ã®n linie de comandă invalide: %s."
 
-#: option.c:2660
+#: option.c:2674
 #, c-format
 msgid "cannot get host-name: %s"
 msgstr "nu pot citi numele maÅŸinii: %s"
 
-#: option.c:2688
+#: option.c:2702
 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:2698
+#: option.c:2712
 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:2701 network.c:721
+#: option.c:2715 network.c:730
 #, fuzzy, c-format
 msgid "failed to read %s: %s"
 msgstr "nu pot citi %s: %n"
 
-#: option.c:2719
+#: option.c:2733
 #, 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:2740
+#: option.c:2754
 msgid "there must be a default domain when --dhcp-fqdn is set"
 msgstr ""
 
@@ -784,78 +793,78 @@ msgstr ""
 msgid "unknown interface %s in bridge-interface"
 msgstr "interfaţă necunoscută %s"
 
-#: network.c:389 dnsmasq.c:186
+#: network.c:393 dnsmasq.c:186
 #, c-format
 msgid "failed to create listening socket: %s"
 msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
 
-#: network.c:396
+#: network.c:400
 #, c-format
 msgid "failed to set IPV6 options on listening socket: %s"
 msgstr "configurarea opÅ£iunilor IPv6 a eÅŸuat pe socket-ul de ascultare: %s"
 
-#: network.c:415
+#: network.c:426
 #, c-format
 msgid "failed to bind listening socket for %s: %s"
 msgstr "activarea socket-ului de ascultare pentru %s a eÅŸuat: %s"
 
-#: network.c:420
+#: network.c:431
 #, c-format
 msgid "failed to listen on socket: %s"
 msgstr "ascultarea pe socket a eÅŸuat: %s"
 
-#: network.c:432
+#: network.c:443
 #, fuzzy, c-format
 msgid "failed to create TFTP socket: %s"
 msgstr "creearea socket-ului de ascultare a eÅŸuat: %s"
 
-#: network.c:628
+#: network.c:637
 #, 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:661
+#: network.c:670
 #, c-format
 msgid "ignoring nameserver %s - local interface"
 msgstr "ignorăm serverul DNS %s - interfaţă locală"
 
-#: network.c:672
+#: network.c:681
 #, 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:687
+#: network.c:696
 msgid "unqualified"
 msgstr "invalid"
 
-#: network.c:687
+#: network.c:696
 msgid "names"
 msgstr ""
 
-#: network.c:689
+#: network.c:698
 msgid "default"
 msgstr ""
 
-#: network.c:691
+#: network.c:700
 msgid "domain"
 msgstr "domeniu"
 
-#: network.c:694
+#: network.c:703
 #, c-format
 msgid "using local addresses only for %s %s"
 msgstr "folosim adresele locale doar pentru %S %s"
 
-#: network.c:696
+#: network.c:705
 #, c-format
 msgid "using nameserver %s#%d for %s %s"
 msgstr "folosim serverul DNS %s#%d pentru %s %s"
 
-#: network.c:699
+#: network.c:708
 #, fuzzy, c-format
 msgid "using nameserver %s#%d(via %s)"
 msgstr "folosim serverul DNS %s#%d"
 
-#: network.c:701
+#: network.c:710
 #, c-format
 msgid "using nameserver %s#%d"
 msgstr "folosim serverul DNS %s#%d"
@@ -1048,21 +1057,21 @@ msgstr ""
 msgid "failed to execute %s: %s"
 msgstr "accesarea serverului %s a eÅŸuat: %n"
 
-#: dnsmasq.c:860
+#: dnsmasq.c:863
 msgid "exiting on receipt of SIGTERM"
 msgstr "am primit SIGTERM, am terminat"
 
-#: dnsmasq.c:878
+#: dnsmasq.c:881
 #, fuzzy, c-format
 msgid "failed to access %s: %s"
 msgstr "accesarea serverului %s a eÅŸuat: %n"
 
-#: dnsmasq.c:900
+#: dnsmasq.c:903
 #, c-format
 msgid "reading %s"
 msgstr "citesc %s"
 
-#: dnsmasq.c:911
+#: dnsmasq.c:914
 #, 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"
@@ -1097,37 +1106,37 @@ msgstr "nu pot creea socket ICMP raw: %s."
 msgid "DHCP packet received on %s which has no address"
 msgstr ""
 
-#: dhcp.c:382
+#: dhcp.c:387
 #, 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:719
+#: dhcp.c:731
 #, fuzzy, c-format
 msgid "failed to read %s:%s"
 msgstr "nu pot citi %s: %n"
 
-#: dhcp.c:755
+#: dhcp.c:767
 #, c-format
 msgid "bad line at %s line %d"
 msgstr "linie invalidă Ã®n %s rândul %d"
 
-#: dhcp.c:870
+#: dhcp.c:882
 #, c-format
 msgid "duplicate IP address %s in dhcp-config directive."
 msgstr "adresă IP duplicat %s Ã®n declaraÅ£ia dhcp-config."
 
-#: dhcp.c:873
+#: dhcp.c:885
 #, fuzzy, c-format
 msgid "duplicate IP address %s in %s."
 msgstr "adresă IP duplicat %s Ã®n declaraÅ£ia dhcp-config."
 
-#: dhcp.c:916
+#: dhcp.c:928
 #, c-format
 msgid "%s has more than one address in hostsfile, using %s for DHCP"
 msgstr ""
 
-#: dhcp.c:921
+#: dhcp.c:933
 #, c-format
 msgid "duplicate IP address %s (%s) in dhcp-config directive"
 msgstr "adresă IP duplicat %s (%s) Ã®n declaraÅ£ia dhcp-config."
@@ -1156,160 +1165,160 @@ msgstr ""
 msgid "failed to write %s: %s (retry in %us)"
 msgstr "nu pot citi %s: %n"
 
-#: rfc2131.c:315
+#: rfc2131.c:316
 #, 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:316
+#: rfc2131.c:317
 msgid "with subnet selector"
 msgstr "cu selectorul de subreÅ£ea"
 
-#: rfc2131.c:316
+#: rfc2131.c:317
 msgid "via"
 msgstr "prin"
 
-#: rfc2131.c:327
+#: rfc2131.c:328
 #, c-format
 msgid "DHCP packet: transaction-id is %u"
 msgstr ""
 
-#: rfc2131.c:332
+#: rfc2131.c:333
 #, c-format
 msgid "Available DHCP subnet: %s/%s"
 msgstr ""
 
-#: rfc2131.c:334
+#: rfc2131.c:335
 #, c-format
 msgid "Available DHCP range: %s -- %s"
 msgstr ""
 
-#: rfc2131.c:362 rfc2131.c:396
+#: rfc2131.c:363 rfc2131.c:397
 msgid "disabled"
 msgstr "dezactivat"
 
-#: rfc2131.c:411 rfc2131.c:928
+#: rfc2131.c:412 rfc2131.c:960
 msgid "address in use"
 msgstr "adresa este folosită"
 
-#: rfc2131.c:425 rfc2131.c:765
+#: rfc2131.c:426 rfc2131.c:797
 msgid "no address available"
 msgstr "nici o adresă disponibilă"
 
-#: rfc2131.c:432 rfc2131.c:891
+#: rfc2131.c:433 rfc2131.c:923
 msgid "wrong network"
 msgstr "reÅ£ea greÅŸită"
 
-#: rfc2131.c:445
+#: rfc2131.c:446
 msgid "no address configured"
 msgstr "adresă lipsă"
 
-#: rfc2131.c:451 rfc2131.c:941
+#: rfc2131.c:452 rfc2131.c:973
 msgid "no leases left"
 msgstr "nu mai am de unde să Ã®mprumut"
 
-#: rfc2131.c:640
+#: rfc2131.c:672
 #, c-format
 msgid "Vendor class: %s"
 msgstr ""
 
-#: rfc2131.c:642
+#: rfc2131.c:674
 #, c-format
 msgid "User class: %s"
 msgstr ""
 
-#: rfc2131.c:683
+#: rfc2131.c:715
 #, fuzzy, c-format
 msgid "disabling DHCP static address %s for %s"
 msgstr "dezactivăm adresele DHCP statice %s"
 
-#: rfc2131.c:704
+#: rfc2131.c:736
 msgid "unknown lease"
 msgstr "împrumut necunoscut"
 
-#: rfc2131.c:713 rfc2131.c:1058
+#: rfc2131.c:745 rfc2131.c:1089
 msgid "ignored"
 msgstr "ignorat"
 
-#: rfc2131.c:736
+#: rfc2131.c:768
 #, c-format
 msgid "not using configured address %s because it is leased to %s"
 msgstr ""
 
-#: rfc2131.c:746
+#: rfc2131.c:778
 #, c-format
 msgid "not using configured address %s because it is in use by the server or relay"
 msgstr ""
 
-#: rfc2131.c:749
+#: rfc2131.c:781
 #, c-format
 msgid "not using configured address %s because it was previously declined"
 msgstr ""
 
-#: rfc2131.c:763 rfc2131.c:934
+#: rfc2131.c:795 rfc2131.c:966
 msgid "no unique-id"
 msgstr ""
 
-#: rfc2131.c:831
+#: rfc2131.c:863
 msgid "wrong server-ID"
 msgstr ""
 
-#: rfc2131.c:850
+#: rfc2131.c:882
 msgid "wrong address"
 msgstr "adresă greÅŸită"
 
-#: rfc2131.c:867
+#: rfc2131.c:899
 msgid "lease not found"
 msgstr "împrumutul nu a fost găsit"
 
-#: rfc2131.c:899
+#: rfc2131.c:931
 msgid "address not available"
 msgstr "adresă indisponibilă"
 
-#: rfc2131.c:910
+#: rfc2131.c:942
 msgid "static lease available"
 msgstr "împrumut static este disponibil"
 
-#: rfc2131.c:914
+#: rfc2131.c:946
 msgid "address reserved"
 msgstr "adresă rezervată"
 
-#: rfc2131.c:922
+#: rfc2131.c:954
 #, c-format
 msgid "abandoning lease to %s of %s"
 msgstr ""
 
-#: rfc2131.c:1356
+#: rfc2131.c:1391
 #, c-format
 msgid "tags: %s"
 msgstr ""
 
-#: rfc2131.c:1443
+#: rfc2131.c:1478
 #, 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:1599
+#: rfc2131.c:1678
 #, c-format
 msgid "Ignoring domain %s for DHCP host name %s"
 msgstr ""
 
-#: rfc2131.c:1617
+#: rfc2131.c:1696
 #, fuzzy, c-format
 msgid "requested options: %s"
 msgstr "compilat cu opÅ£iunile: %s"
 
-#: rfc2131.c:1666
+#: rfc2131.c:1746
 #, fuzzy, c-format
 msgid "next server: %s"
 msgstr "eroare DBus: %s"
 
-#: rfc2131.c:1690
+#: rfc2131.c:1770
 #, c-format
 msgid "bootfile name: %s"
 msgstr ""
 
-#: rfc2131.c:1693
+#: rfc2131.c:1773
 #, c-format
 msgid "server name: %s"
 msgstr ""
@@ -1324,24 +1333,24 @@ msgstr "nu pot să activez socket-ul netlink: %s"
 msgid "netlink returns error: %s"
 msgstr "eroare DBus: %s"
 
-#: dbus.c:115
+#: dbus.c:151
 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:243
+#: dbus.c:287
 msgid "setting upstream servers from DBus"
 msgstr "configurăm serverele superioare prin Dbus"
 
-#: dbus.c:281
+#: dbus.c:325
 msgid "could not register a DBus message handler"
 msgstr "nu pot activa o interfaţă de mesaje DBus"
 
-#: bpf.c:146
+#: bpf.c:150
 #, c-format
 msgid "cannot create DHCP BPF socket: %s"
 msgstr "nu pot creea socket DHCP BPF: %s"
 
-#: bpf.c:174
+#: bpf.c:178
 #, 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"
index aed0cad1ac7c431a453b8dc2a4243d6ecdf016dd..c5bcd6f55afb7f7dc75c09a337e68085bf67cc1d 100644 (file)
--- a/src/bpf.c
+++ b/src/bpf.c
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
@@ -63,16 +63,20 @@ int iface_enumerate(void *parm, int (*ipv4_callback)(), int (*ipv6_callback)())
        }
     }
   
-  for (ptr = ifc.ifc_buf; ptr < ifc.ifc_buf + ifc.ifc_len; ptr += len )
+  for (ptr = ifc.ifc_buf; ptr < (char *)(ifc.ifc_buf + ifc.ifc_len); ptr += len)
     {
       /* subsequent entries may not be aligned, so copy into
         an aligned buffer to avoid nasty complaints about 
         unaligned accesses. */
-#ifdef HAVE_SOCKADDR_SA_LEN
-      len = ((struct ifreq *)ptr)->ifr_addr.sa_len + offsetof(struct ifreq, ifr_ifru);
-#else
+
       len = sizeof(struct ifreq);
+      
+#ifdef HAVE_SOCKADDR_SA_LEN
+      ifr = (struct ifreq *)ptr;
+      if (ifr->ifr_addr.sa_len > sizeof(ifr->ifr_ifru))
+       len = ifr->ifr_addr.sa_len + offsetof(struct ifreq, ifr_ifru);
 #endif
+      
       if (!expand_buf(&ifreq, len))
        goto err;
 
index d3c758385d13107309cce81a8ed22ff37f63c16e..1cf37eb8897133f91b4951e7797bc587d63dd293 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
index 431d9e6305b0d7384e7c5c26ab510b82ede9ce95..d499a40d76b5ee7e58256247ba006a3e65c22c3d 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#define VERSION "2.46"
+#define VERSION "2.47"
 
 #define FTABSIZ 150 /* max number of outstanding requests (default) */
 #define MAX_PROCS 20 /* max no children for TCP requests */
 #  define RESOLVFILE "/etc/resolv.conf"
 #endif
 #define RUNFILE "/var/run/dnsmasq.pid"
-#if defined(__FreeBSD__) || defined (__OpenBSD__) || defined(__DragonFly__)
-#   define LEASEFILE "/var/db/dnsmasq.leases"
-#elif defined(__sun__) || defined (__sun)
-#   define LEASEFILE "/var/cache/dnsmasq.leases"
-#else
-#   define LEASEFILE "/var/lib/misc/dnsmasq.leases"
+
+#ifndef LEASEFILE
+#   if defined(__FreeBSD__) || defined (__OpenBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
+#      define LEASEFILE "/var/db/dnsmasq.leases"
+#   elif defined(__sun__) || defined (__sun)
+#      define LEASEFILE "/var/cache/dnsmasq.leases"
+#   else
+#      define LEASEFILE "/var/lib/misc/dnsmasq.leases"
+#   endif
 #endif
-#if defined(__FreeBSD__)
-#   define CONFFILE "/usr/local/etc/dnsmasq.conf"
-#else
-#   define CONFFILE "/etc/dnsmasq.conf"
+
+#ifndef CONFFILE
+#   if defined(__FreeBSD__)
+#      define CONFFILE "/usr/local/etc/dnsmasq.conf"
+#   else
+#      define CONFFILE "/etc/dnsmasq.conf"
+#   endif
 #endif
+
 #define DEFLEASE 3600 /* default lease time, 1 hour */
 #define CHUSER "nobody"
 #define CHGRP "dip"
@@ -61,6 +68,7 @@
 #define TFTP_MAX_CONNECTIONS 50 /* max simultaneous connections */
 #define LOG_MAX 5 /* log-queue length */
 #define RANDFILE "/dev/urandom"
+#define DAD_WAIT 20 /* retry binding IPv6 sockets for this long */
 
 /* DBUS interface specifics */
 #define DNSMASQ_SERVICE "uk.org.thekelleys.dnsmasq"
index dc5a39e3545d79fccb6aa6bf5fcea74e64234e95..f8bc8f908bdb035ed2daf1ffacbef241dd5cd6e4 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
 #define DBUS_API_SUBJECT_TO_CHANGE
 #include <dbus/dbus.h>
 
+const char* introspection_xml =
+"<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
+"\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
+"<node name=\"" DNSMASQ_PATH "\">\n"
+"  <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
+"    <method name=\"Introspect\">\n"
+"      <arg name=\"data\" direction=\"out\" type=\"s\"/>\n"
+"    </method>\n"
+"  </interface>\n"
+"  <interface name=\"" DNSMASQ_SERVICE "\">\n"
+"    <method name=\"ClearCache\">\n"
+"    </method>\n"
+"    <method name=\"GetVersion\">\n"
+"      <arg name=\"version\" direction=\"out\" type=\"s\"/>\n"
+"    </method>\n"
+"    <method name=\"SetServers\">\n"
+"      <arg name=\"servers\" direction=\"in\" type=\"av\"/>\n"
+"    </method>\n"
+"    <signal name=\"DhcpLeaseAdded\">\n"
+"      <arg name=\"ipaddr\" type=\"s\"/>\n"
+"      <arg name=\"hwaddr\" type=\"s\"/>\n"
+"      <arg name=\"hostname\" type=\"s\"/>\n"
+"    </signal>\n"
+"    <signal name=\"DhcpLeaseDeleted\">\n"
+"      <arg name=\"ipaddr\" type=\"s\"/>\n"
+"      <arg name=\"hwaddr\" type=\"s\"/>\n"
+"      <arg name=\"hostname\" type=\"s\"/>\n"
+"    </signal>\n"
+"    <signal name=\"DhcpLeaseUpdated\">\n"
+"      <arg name=\"ipaddr\" type=\"s\"/>\n"
+"      <arg name=\"hwaddr\" type=\"s\"/>\n"
+"      <arg name=\"hostname\" type=\"s\"/>\n"
+"    </signal>\n"
+"  </interface>\n"
+"</node>\n";
+
 struct watch {
   DBusWatch *watch;      
   struct watch *next;
@@ -229,7 +265,15 @@ DBusHandlerResult message_handler(DBusConnection *connection,
 {
   char *method = (char *)dbus_message_get_member(message);
    
-  if (strcmp(method, "GetVersion") == 0)
+  if (dbus_message_is_method_call(message, DBUS_INTERFACE_INTROSPECTABLE, "Introspect"))
+    {
+      DBusMessage *reply = dbus_message_new_method_return(message);
+
+      dbus_message_append_args(reply, DBUS_TYPE_STRING, &introspection_xml, DBUS_TYPE_INVALID);
+      dbus_connection_send (connection, reply, NULL);
+      dbus_message_unref (reply);
+    }
+  else if (strcmp(method, "GetVersion") == 0)
     {
       char *v = VERSION;
       DBusMessage *reply = dbus_message_new_method_return(message);
index c802774c13323ecb21bbd449a0ba12d8c2a4c88f..706f8d4cf7087b0ab7c85d9d059b80a930f7b875 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
@@ -345,7 +345,12 @@ void dhcp_packet(time_t now)
 #endif
    
 #ifdef HAVE_SOLARIS_NETWORK
+  /* OpenSolaris eliminates IP_XMIT_IF */
+#  ifdef IP_XMIT_IF
   setsockopt(daemon->dhcpfd, IPPROTO_IP, IP_XMIT_IF, &iface_index, sizeof(iface_index));
+#  else
+  setsockopt(daemon->dhcpfd, IPPROTO_IP, IP_BOUND_IF, &iface_index, sizeof(iface_index));
+#  endif
 #endif
   
   while(sendmsg(daemon->dhcpfd, &msg, 0) == -1 && retry_send());
@@ -560,9 +565,16 @@ int address_allocate(struct dhcp_context *context,
              if (addr.s_addr == d->router.s_addr)
                break;
 
+           /* Addresses which end in .255 and .0 are broken in Windows even when using 
+              supernetting. ie dhcp-range=192.168.0.1,192.168.1.254,255,255,254.0
+              then 192.168.0.255 is a valid IP address, but not for Windows as it's
+              in the class C range. See  KB281579. We therefore don't allocate these 
+              addresses to avoid hard-to-diagnose problems. Thanks Bill. */        
            if (!d &&
                !lease_find_by_addr(addr) && 
-               !config_find_by_address(daemon->dhcp_conf, addr))
+               !config_find_by_address(daemon->dhcp_conf, addr) &&
+               (!IN_CLASSC(ntohl(addr.s_addr)) || 
+                ((ntohl(addr.s_addr) & 0xff) != 0xff && ((ntohl(addr.s_addr) & 0xff) != 0x0))))
              {
                struct ping_result *r, *victim = NULL;
                int count, max = (int)(0.6 * (((float)PING_CACHE_TIME)/
@@ -744,7 +756,7 @@ void dhcp_read_ethers(void)
       while (strlen(buff) > 0 && isspace((int)buff[strlen(buff)-1]))
        buff[strlen(buff)-1] = 0;
       
-      if ((*buff == '#') || (*buff == '+'))
+      if ((*buff == '#') || (*buff == '+') || (*buff == 0))
        continue;
       
       for (ip = buff; *ip && !isspace((int)*ip); ip++);
index 008244ee36c3b6ae8b82e7421f4129f4d26f0232..9dcab244ecc460dd538546e17b8422d0cdadd4d7 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
@@ -856,6 +856,9 @@ static void async_event(int pipe, time_t now)
        
        if (daemon->lease_stream)
          fclose(daemon->lease_stream);
+
+       if (daemon->runfile)
+         unlink(daemon->runfile);
        
        my_syslog(LOG_INFO, _("exiting on receipt of SIGTERM"));
        flush_log();
index 24b42044f03c55a80de78073b346dea1c918942c..db822d6928f325df41d94ec3627234d1314dec39 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
  
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#define COPYRIGHT "Copyright (C) 2000-2008 Simon Kelley" 
+#define COPYRIGHT "Copyright (C) 2000-2009 Simon Kelley" 
 
 #ifndef NO_LARGEFILE
 /* Ensure we can use files >2GB (log files may grow this big) */
@@ -201,7 +201,7 @@ struct bogus_addr {
 
 /* dns doctor param */
 struct doctor {
-  struct in_addr in, out, mask;
+  struct in_addr in, end, out, mask;
   struct doctor *next;
 };
 
@@ -464,7 +464,12 @@ struct dhcp_config {
 
 struct dhcp_opt {
   int opt, len, flags;
-  unsigned char *val, *vendor_class;
+  union {
+    int encap;
+    unsigned int wildcard_mask;
+    unsigned char *vendor_class;
+  } u;
+  unsigned char *val;
   struct dhcp_netid *netid;
   struct dhcp_opt *next;
 };
@@ -472,9 +477,13 @@ struct dhcp_opt {
 #define DHOPT_ADDR               1
 #define DHOPT_STRING             2
 #define DHOPT_ENCAPSULATE        4
-#define DHOPT_VENDOR_MATCH       8
+#define DHOPT_ENCAP_MATCH        8
 #define DHOPT_FORCE             16
 #define DHOPT_BANK              32
+#define DHOPT_ENCAP_DONE        64
+#define DHOPT_MATCH            128
+#define DHOPT_VENDOR           256
+#define DHOPT_HEX              512
 
 struct dhcp_boot {
   char *file, *sname;
@@ -488,7 +497,6 @@ struct dhcp_boot {
 #define MATCH_CIRCUIT    3
 #define MATCH_REMOTE     4
 #define MATCH_SUBSCRIBER 5
-#define MATCH_OPTION     6
 
 /* vendorclass, userclass, remote-id or cicuit-id */
 struct dhcp_vendor {
@@ -608,7 +616,7 @@ extern struct daemon {
   struct hostsfile *addn_hosts;
   struct dhcp_context *dhcp;
   struct dhcp_config *dhcp_conf;
-  struct dhcp_opt *dhcp_opts;
+  struct dhcp_opt *dhcp_opts, *dhcp_match;
   struct dhcp_vendor *dhcp_vendors;
   struct dhcp_mac *dhcp_macs;
   struct dhcp_boot *boot_config;
index 5bda32cf1f7a547997be07f8feba131daeeda873..b05331fb07b62b15caad3b1ea65eec5774eff9c8 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
index 947e29852c95d42a5c77d9bb8815ad0297872ca2..d7d60846871ed725d81a78dfed015e5970646210 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
@@ -93,7 +93,7 @@ int create_helper(int event_fd, int err_fd, uid_t uid, gid_t gid, long max_fd)
              /* kill daemon */
              send_event(event_fd, EVENT_DIE, 0);
              /* return error */
-             send_event(err_fd, EVENT_HUSER_ERR, errno);;
+             send_event(err_fd, EVENT_HUSER_ERR, errno);
            }
          _exit(0);
        }
index 28cc2524ed1c2d59ba5e070674cf8a593737af03..80da18c37a8f8c9e3cd093d11e75b482d3330d01 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
index 97e0b1dc6b3737e967db3064ff19c522eff304af..e4a00fd0e8e87830c04c890df3e66f28994656fe 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
index 4d931787f6586589f591da016d27aaa0397a28fc..cd61e970e937a1ece06528d18d1bf27bd829b57e 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
index cd200ea28c1dda07ddc6fd5e0a466b73b8c227fe..755297ba267e916550076f22158fd1d54a0a9d85 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
@@ -366,8 +366,11 @@ struct listener *create_bound_listeners(void)
 {
   struct listener *listeners = NULL;
   struct irec *iface;
-  int opt = 1;
-  
+  int rc, opt = 1;
+#ifdef HAVE_IPV6
+  static int dad_count = 0;
+#endif
+
   for (iface = daemon->interfaces; iface; iface = iface->next)
     {
       struct listener *new = safe_malloc(sizeof(struct listener));
@@ -377,6 +380,7 @@ struct listener *create_bound_listeners(void)
       new->tftpfd = -1;
       new->tcpfd = -1;
       new->fd = -1;
+      listeners = new;
 
       if (daemon->port != 0)
        {
@@ -396,27 +400,34 @@ struct listener *create_bound_listeners(void)
                die(_("failed to set IPV6 options on listening socket: %s"), NULL, EC_BADNET);
            }
 #endif
-         
-         if (bind(new->tcpfd, &iface->addr.sa, sa_len(&iface->addr)) == -1 ||
-             bind(new->fd, &iface->addr.sa, sa_len(&iface->addr)) == -1)
+
+         while(1)
            {
+             if ((rc = bind(new->fd, &iface->addr.sa, sa_len(&iface->addr))) != -1)
+               break;
+             
 #ifdef HAVE_IPV6
-             if (iface->addr.sa.sa_family == AF_INET6 && (errno == ENODEV || errno == EADDRNOTAVAIL))
+             /* An interface may have an IPv6 address which is still undergoing DAD. 
+                If so, the bind will fail until the DAD completes, so we try over 20 seconds
+                before failing. */
+             if (iface->addr.sa.sa_family == AF_INET6 && (errno == ENODEV || errno == EADDRNOTAVAIL) && 
+                 dad_count++ < DAD_WAIT)
                {
-                 close(new->tcpfd);
-                 close(new->fd);
-                 free(new);
-                 new = NULL;
+                 sleep(1);
+                 continue;
                }
-             else
 #endif
-               {
-                 prettyprint_addr(&iface->addr, daemon->namebuff);
-                 die(_("failed to bind listening socket for %s: %s"), 
-                     daemon->namebuff, EC_BADNET);
-               }
+             break;
            }
-         else if (listen(new->tcpfd, 5) == -1)
+         
+         if (rc == -1 || bind(new->tcpfd, &iface->addr.sa, sa_len(&iface->addr)) == -1)
+           {
+             prettyprint_addr(&iface->addr, daemon->namebuff);
+             die(_("failed to bind listening socket for %s: %s"), 
+                 daemon->namebuff, EC_BADNET);
+           }
+           
+         if (listen(new->tcpfd, 5) == -1)
            die(_("failed to listen on socket: %s"), NULL, EC_BADNET);
        }
 
@@ -434,8 +445,6 @@ struct listener *create_bound_listeners(void)
        }
 #endif
 
-      if (new)
-       listeners = new;
     }
 
   return listeners;
@@ -519,7 +528,7 @@ int local_bind(int fd, union mysockaddr *addr, char *intname, int is_tcp)
     return 0;
     
 #if defined(SO_BINDTODEVICE)
-  if (strlen(intname) != 0 &&
+  if (intname[0] != 0 &&
       setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, intname, sizeof(intname)) == -1)
     return 0;
 #endif
@@ -534,7 +543,7 @@ static struct serverfd *allocate_sfd(union mysockaddr *addr, char *intname)
 
   /* when using random ports, servers which would otherwise use
      the INADDR_ANY/port0 socket have sfd set to NULL */
-  if (!daemon->osport)
+  if (!daemon->osport && intname[0] == 0)
     {
       errno = 0;
       
@@ -620,7 +629,7 @@ void pre_allocate_sfds(void)
        (daemon->options & OPT_NOWILD))
       {
        prettyprint_addr(&srv->addr, daemon->namebuff);
-       if (strlen(srv->interface) != 0)
+       if (srv->interface[0] != 0)
          {
            strcat(daemon->namebuff, " ");
            strcat(daemon->namebuff, srv->interface);
@@ -695,7 +704,7 @@ void check_servers(void)
          else if (!(new->flags & SERV_LITERAL_ADDRESS))
            my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, s1, s2);
        }
-      else if (strlen(new->interface) != 0)
+      else if (new->interface[0] != 0)
        my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, new->interface); 
       else
        my_syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port); 
index 6b336fb1cd00172a3aa161969f8bbc2106f20278..194cbbac0eb6a95ecf9853fa1da41dab426d6b96 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /* define this to get facilitynames */
@@ -310,7 +310,7 @@ static struct {
   { LOPT_MAX_LOGS, ARG_ONE, "[=<log lines>]", gettext_noop("Enable async. logging; optionally set queue length."), NULL },
   { LOPT_REBIND, OPT_NO_REBIND, NULL, gettext_noop("Stop DNS rebinding. Filter private IP ranges when resolving."), NULL },
   { LOPT_NOLAST, OPT_ALL_SERVERS, NULL, gettext_noop("Always perform DNS queries to all servers."), NULL },
-  { LOPT_MATCH, ARG_DUP, "<netid>,<opt-no>", gettext_noop("Set tag if client includes option in request."), NULL },
+  { LOPT_MATCH, ARG_DUP, "<netid>,<optspec>", gettext_noop("Set tag if client includes matching option in request."), NULL },
   { LOPT_ALTPORT, ARG_ONE, "[=<ports>]", gettext_noop("Use alternative ports for DHCP."), NULL },
   { LOPT_SCRIPTUSR, ARG_ONE, "<username>", gettext_noop("Run lease-change script as this user."), NULL },
   { LOPT_NAPTR, ARG_DUP, "<name>,<naptr>", gettext_noop("Specify NAPTR DNS record."), NULL },
@@ -391,6 +391,9 @@ static const struct {
   { "user-class", 77, 0 },
   { "FQDN", 81, OT_INTERNAL },
   { "agent-id", 82, OT_INTERNAL },
+  { "client-arch", 93, 2 },
+  { "client-interface-id", 94, 0 },
+  { "client-machine-id", 97, 0 },
   { "subnet-select", 118, OT_INTERNAL },
   { "domain-search", 119, 0 },
   { "sip-server", 120, 0 },
@@ -491,11 +494,12 @@ static char *opt_string_alloc(char *cp)
 
 /* find next comma, split string with zero and eliminate spaces.
    return start of string following comma */
-static char *split(char *s)
+
+static char *split_chr(char *s, char c)
 {
   char *comma, *p;
 
-  if (!s || !(comma = strchr(s, ',')))
+  if (!s || !(comma = strchr(s, c)))
     return NULL;
   
   p = comma;
@@ -509,6 +513,11 @@ static char *split(char *s)
   return comma;
 }
 
+static char *split(char *s)
+{
+  return split_chr(s, ',');
+}
+
 static int canonicalise_opt(char *s)
 {
   if (!s)
@@ -642,7 +651,6 @@ static char *parse_dhcp_opt(char *arg, int flags)
   new->flags = flags;
   new->netid = NULL;
   new->val = NULL;
-  new->vendor_class = NULL;
   new->opt = 0;
   
   while (arg)
@@ -675,7 +683,12 @@ static char *parse_dhcp_opt(char *arg, int flags)
        }
       else if (strstr(arg, "vendor:") == arg)
        {
-         new->vendor_class = (unsigned char *)opt_string_alloc(arg+7);
+         new->u.vendor_class = (unsigned char *)opt_string_alloc(arg+7);
+         new->flags |= DHOPT_VENDOR;
+       }
+      else if (strstr(arg, "encap:") == arg)
+       {
+         new->u.encap = atoi(arg+6);
          new->flags |= DHOPT_ENCAPSULATE;
        }
       else
@@ -740,7 +753,8 @@ static char *parse_dhcp_opt(char *arg, int flags)
            else
              is_dec = 0;
            if (!((c >='A' && c <= 'F') ||
-                 (c >='a' && c <= 'f')))
+                 (c >='a' && c <= 'f') || 
+                 (c == '*' && (flags & DHOPT_MATCH))))
              is_hex = 0;
          }
      
@@ -757,7 +771,8 @@ static char *parse_dhcp_opt(char *arg, int flags)
        {
          new->len = digs;
          new->val = opt_malloc(new->len);
-         parse_hex(comma, new->val, digs, NULL, NULL);
+         parse_hex(comma, new->val, digs, (flags & DHOPT_MATCH) ? &new->u.wildcard_mask : NULL, NULL);
+         new->flags |= DHOPT_HEX;
        }
       else if (is_dec)
        {
@@ -804,8 +819,7 @@ static char *parse_dhcp_opt(char *arg, int flags)
            {
              cp = comma;
              comma = split(cp);
-             if ((slash = strchr(cp, '/')))
-               *slash++ = 0;
+             slash = split_chr(cp, '/');
              in.s_addr = inet_addr(cp);
              if (!slash)
                {
@@ -910,8 +924,23 @@ static char *parse_dhcp_opt(char *arg, int flags)
   
   if (!problem)
     {
-      new->next = daemon->dhcp_opts;
-      daemon->dhcp_opts = new;
+      if (flags == DHOPT_MATCH)
+       {
+         if ((new->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR)) ||
+             !new->netid ||
+             new->netid->next)
+           problem = _("illegal dhcp-match");
+         else
+           {
+             new->next = daemon->dhcp_match;
+             daemon->dhcp_match = new;
+           }
+       }
+      else     
+       {
+         new->next = daemon->dhcp_opts;
+         daemon->dhcp_opts = new;
+       }
     }
 
   return problem;
@@ -1149,10 +1178,9 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
                {
                  struct cond_domain *new = safe_malloc(sizeof(struct cond_domain));
                  unhide_metas(comma);
-                 if ((arg = strchr(comma, '/')))
+                 if ((arg = split_chr(comma, '/')))
                    {
                      int mask;
-                     *arg++ = 0;
                      if ((new->start.s_addr = inet_addr(comma)) == (in_addr_t)-1 ||
                          !atoi_check(arg, &mask))
                        option = '?';
@@ -1292,10 +1320,9 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
          {
            char *end;
            arg++;
-           while ((end = strchr(arg, '/')))
+           while ((end = split_chr(arg, '/')))
              {
                char *domain = NULL;
-               *end = 0;
                /* # matches everything and becomes a zero length domain string */
                if (strcmp(arg, "#") == 0)
                  domain = "";
@@ -1309,7 +1336,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
                newlist = serv;
                serv->domain = domain;
                serv->flags = domain ? SERV_HAS_DOMAIN : SERV_FOR_NODOTS;
-               arg = end+1;
+               arg = end;
              }
            if (!newlist)
              {
@@ -1342,23 +1369,14 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
            int source_port = 0, serv_port = NAMESERVER_PORT;
            char *portno, *source;
            
-           if ((source = strchr(arg, '@'))) /* is there a source. */
-             {
-               *source = 0; 
-               if ((portno = strchr(source+1, '#')))
-                 { 
-                   *portno = 0;
-                   if (!atoi_check16(portno+1, &source_port))
-                     problem = _("bad port");
-                 }
-             }
-           
-           if ((portno = strchr(arg, '#'))) /* is there a port no. */
-             {
-               *portno = 0;
-               if (!atoi_check16(portno+1, &serv_port))
-                 problem = _("bad port");
-             }
+           if ((source = split_chr(arg, '@')) && /* is there a source. */
+               (portno = split_chr(source, '#')) &&
+               !atoi_check16(portno, &source_port))
+             problem = _("bad port");
+                   
+           if ((portno = split_chr(arg, '#')) && /* is there a port no. */
+               !atoi_check16(portno, &serv_port))
+             problem = _("bad port");
            
            if ((newlist->addr.in.sin_addr.s_addr = inet_addr(arg)) != (in_addr_t) -1)
              {
@@ -1371,11 +1389,11 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
                if (source)
                  {
                    newlist->flags |= SERV_HAS_SOURCE;
-                   if ((newlist->source_addr.in.sin_addr.s_addr = inet_addr(source+1)) == (in_addr_t) -1)
+                   if ((newlist->source_addr.in.sin_addr.s_addr = inet_addr(source)) == (in_addr_t) -1)
                      {
 #if defined(SO_BINDTODEVICE)
                        newlist->source_addr.in.sin_addr.s_addr = INADDR_ANY;
-                       strncpy(newlist->interface, source+1, IF_NAMESIZE);
+                       strncpy(newlist->interface, source, IF_NAMESIZE);
 #else
                        problem = _("interface binding not supported");
 #endif
@@ -1396,11 +1414,11 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
                if (source)
                  {
                     newlist->flags |= SERV_HAS_SOURCE;
-                    if (inet_pton(AF_INET6, source+1, &newlist->source_addr.in6.sin6_addr) == 0)
+                    if (inet_pton(AF_INET6, source, &newlist->source_addr.in6.sin6_addr) == 0)
                      {
-#if defined(SO_BINDTODEVICE) || defined(HAVE_SOLARIS_NETWORK)
+#if defined(SO_BINDTODEVICE)
                        newlist->source_addr.in6.sin6_addr = in6addr_any; 
-                       strncpy(newlist->interface, source+1, IF_NAMESIZE);
+                       strncpy(newlist->interface, source, IF_NAMESIZE);
 #else
                        problem = _("interface binding not supported");
 #endif
@@ -1455,7 +1473,7 @@ static char *one_opt(int option, char *arg, char *gen_prob, int nest)
     
     case LOPT_MINPORT:  /* --min-port */
       if (!atoi_check16(arg, &daemon->min_port))
-option = '?';
+       option = '?';
       break;
 
     case '0':  /* --dns-forward-max */
@@ -1840,12 +1858,14 @@ option = '?';
        break;
       }
       
-    case 'O':
-    case LOPT_FORCE:
+    case 'O':           /* --dhcp-option */
+    case LOPT_FORCE:    /* --dhcp-option-force */
     case LOPT_OPTS:
+    case LOPT_MATCH:    /* --dhcp-match */
       problem = parse_dhcp_opt(arg, 
                               option == LOPT_FORCE ? DHOPT_FORCE : 
-                              (option == LOPT_OPTS ? DHOPT_BANK : 0));
+                              (option == LOPT_MATCH ? DHOPT_MATCH :
+                              (option == LOPT_OPTS ? DHOPT_BANK : 0)));
       break;
       
     case 'M': /* --dhcp-boot */
@@ -1921,7 +1941,6 @@ option = '?';
     case LOPT_CIRCUIT:  /* --dhcp-circuitid */
     case LOPT_REMOTE:   /* --dhcp-remoteid */
     case LOPT_SUBSCR:   /* --dhcp-subscrid */
-    case LOPT_MATCH:    /* --dhcp-match */
       {
        if (!(comma = split(arg)))
          option = '?';
@@ -1942,9 +1961,7 @@ option = '?';
              else if (*p != ':')
                break;
            unhide_metas(comma);
-           if (option == LOPT_MATCH) 
-             new->option = atoi(comma);
-           else if (option == 'U' || option == 'j' || *p || !dig)
+           if (option == 'U' || option == 'j' || *p || !dig)
              {
                new->len = strlen(comma);  
                new->data = opt_malloc(new->len);
@@ -1974,9 +1991,6 @@ option = '?';
              case LOPT_SUBSCR:
                new->match_type = MATCH_SUBSCRIBER;
                break;
-             case LOPT_MATCH:
-               new->match_type = MATCH_OPTION;
-               break;
              }
            new->next = daemon->dhcp_vendors;
            daemon->dhcp_vendors = new;
@@ -2047,13 +2061,14 @@ option = '?';
       
     case 'V':  /* --alias */
       {
-       char *a[3] = { NULL, NULL, NULL };
+       char *dash, *a[3] = { NULL, NULL, NULL };
        int k = 0;
-       struct in_addr in, out, mask;
-       struct doctor *new;
-       
-       mask.s_addr = 0xffffffff;
-       
+       struct doctor *new = opt_malloc(sizeof(struct doctor));
+       new->next = daemon->doctors;
+       daemon->doctors = new;
+       new->mask.s_addr = 0xffffffff;
+       new->end.s_addr = 0;
+
        if ((a[0] = arg))
          for (k = 1; k < 3; k++)
            {
@@ -2062,23 +2077,21 @@ option = '?';
              unhide_metas(a[k]);
            }
        
+       dash = split_chr(a[0], '-');
+
        if ((k < 2) || 
-           ((in.s_addr = inet_addr(a[0])) == (in_addr_t)-1) ||
-           ((out.s_addr = inet_addr(a[1])) == (in_addr_t)-1))
-         {
-           option = '?';
-           break;
-         }
+           ((new->in.s_addr = inet_addr(a[0])) == (in_addr_t)-1) ||
+           ((new->out.s_addr = inet_addr(a[1])) == (in_addr_t)-1))
+         option = '?';
        
        if (k == 3)
-         mask.s_addr = inet_addr(a[2]);
+         new->mask.s_addr = inet_addr(a[2]);
        
-       new = opt_malloc(sizeof(struct doctor));
-       new->in = in;
-       new->out = out;
-       new->mask = mask;
-       new->next = daemon->doctors;
-       daemon->doctors = new;
+       if (dash && 
+           ((new->end.s_addr = inet_addr(dash)) == (in_addr_t)-1 ||
+            !is_same_net(new->in, new->end, new->mask) ||
+            ntohl(new->in.s_addr) > ntohl(new->end.s_addr)))
+         problem = _("invalid alias range");
        
        break;
       }
@@ -2513,7 +2526,8 @@ void reread_dhcp(void)
          
          if (opts->flags & DHOPT_BANK)
            {
-             free(opts->vendor_class);
+             if ((opts->flags & DHOPT_VENDOR))
+               free(opts->u.vendor_class);
              free(opts->val);
              for (id = opts->netid; id; id = next)
                {
index 5b468eb96c0598a1b5383563a42a85f22278fc74..ea27b0eff60a7f9f9fae27cfc529b88080e19af1 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
@@ -25,7 +25,7 @@ static int add_resource_record(HEADER *header, char *limit, int *truncp,
     ((size_t)((pp) - (unsigned char *)(header) + (len)) <= (plen))
 
 #define ADD_RDLEN(header, pp, plen, len) \
-    (!CHECK_LEN(header, pp, plen, len) ? 0 : (int)((pp) += (len)), 1)
+    (!CHECK_LEN(header, pp, plen, len) ? 0 : (long)((pp) += (len)), 1)
 
 static int extract_name(HEADER *header, size_t plen, unsigned char **pp, 
                        char *name, int isExtract, int extrabytes)
@@ -551,15 +551,23 @@ static unsigned char *do_doctor(unsigned char *p, int count, HEADER *header, siz
          memcpy(&addr, p, INADDRSZ);
          
          for (doctor = daemon->doctors; doctor; doctor = doctor->next)
-           if (is_same_net(doctor->in, addr, doctor->mask))
-             {
-               addr.s_addr &= ~doctor->mask.s_addr;
-               addr.s_addr |= (doctor->out.s_addr & doctor->mask.s_addr);
-               /* Since we munged the data, the server it came from is no longer authoritative */
-               header->aa = 0;
-               memcpy(p, &addr, INADDRSZ);
-               break;
-             }
+           {
+             if (doctor->end.s_addr == 0)
+               {
+                 if (!is_same_net(doctor->in, addr, doctor->mask))
+                   continue;
+               }
+             else if (ntohl(doctor->in.s_addr) > ntohl(addr.s_addr) || 
+                      ntohl(doctor->end.s_addr) < ntohl(addr.s_addr))
+               continue;
+            
+             addr.s_addr &= ~doctor->mask.s_addr;
+             addr.s_addr |= (doctor->out.s_addr & doctor->mask.s_addr);
+             /* Since we munged the data, the server it came from is no longer authoritative */
+             header->aa = 0;
+             memcpy(p, &addr, INADDRSZ);
+             break;
+           }
        }
       
       if (!ADD_RDLEN(header, p, qlen, rdlen))
index e3f50ba6b6a4399ccc1e9d74f21f4424e86f9129..c9320eef4f298023ee7b3013e340963effc15bdd 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
@@ -72,7 +72,7 @@
 #define option_ptr(opt, i) ((void *)&(((unsigned char *)(opt))[2u+(unsigned int)(i)]))
 
 static int sanitise(unsigned char *opt, char *buf);
-static struct in_addr server_id(struct dhcp_context *context, struct in_addr override);
+static struct in_addr server_id(struct dhcp_context *context, struct in_addr override, struct in_addr fallback);
 static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config *config, unsigned char *opt);
 static void option_put(struct dhcp_packet *mess, unsigned char *end, int opt, int len, unsigned int val);
 static void option_put_string(struct dhcp_packet *mess, unsigned char *end, 
@@ -99,7 +99,7 @@ static void do_options(struct dhcp_context *context,
                       unsigned char *agent_id);
 
 static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt); 
-
+static void do_encap_opts(int encap, struct dhcp_packet *mess, unsigned char *end, int null_term);
          
 size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
                  size_t sz, time_t now, int unicast_dest, int *is_inform)
@@ -127,6 +127,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
   unsigned char *emac = NULL;
   int emac_len = 0;
   struct dhcp_netid known_id, iface_id;
+  struct dhcp_opt *o;
 
   subnet_addr.s_addr = override.s_addr = 0;
 
@@ -574,6 +575,46 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       netid = &config->netid;
     }
   
+  /* 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. 
+     If no data given, existance of the option is enough. */
+  for (o = daemon->dhcp_match; o; o = o->next)
+    {
+      int i, matched = 0;
+      
+      if (!(opt = option_find(mess, sz, o->opt, 1)) ||
+         o->len > option_len(opt))
+       continue;
+      
+      if (o->len == 0)
+       matched = 1;
+      else if (o->flags & DHOPT_HEX)
+       { 
+         if (memcmp_masked(o->val, option_ptr(opt, 0), o->len, o->u.wildcard_mask))
+           matched = 1;
+       }
+      else 
+       for (i = 0; i <= (option_len(opt) - o->len); ) 
+         {
+           if (memcmp(o->val, option_ptr(opt, i), o->len) == 0)
+             {
+               matched = 1;
+               break;
+             }
+
+           if (o->flags & DHOPT_STRING)
+             i++;
+           else
+             i += o->len;
+         }
+      
+      if (matched)
+       {
+         o->netid->next = netid;
+         netid = o->netid;
+       }
+    }
+       
   /* user-class options are, according to RFC3004, supposed to contain
      a set of counted strings. Here we check that this is so (by seeing
      if the counts are consistent with the overall option length) and if
@@ -597,7 +638,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
            ucp[j] = 0;
          }
     }
-  
+    
   for (vendor = daemon->dhcp_vendors; vendor; vendor = vendor->next)
     {
       int mopt;
@@ -606,15 +647,6 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
        mopt = OPTION_VENDOR_ID;
       else if (vendor->match_type == MATCH_USER)
        mopt = OPTION_USER_CLASS; 
-      else if (vendor->match_type == MATCH_OPTION)
-       {
-         if (option_find(mess, sz, vendor->option, 1))
-           {
-             vendor->netid.next = netid;
-             netid = &vendor->netid;
-           }
-         continue;
-       }
       else
        continue;
 
@@ -662,7 +694,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
     {
     case DHCPDECLINE:
       if (!(opt = option_find(mess, sz, OPTION_SERVER_IDENTIFIER, INADDRSZ)) ||
-         option_addr(opt).s_addr != server_id(context, override).s_addr)
+         option_addr(opt).s_addr != server_id(context, override, fallback).s_addr)
        return 0;
       
       /* sanitise any message. Paranoid? Moi? */
@@ -695,7 +727,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
     case DHCPRELEASE:
       if (!(context = narrow_context(context, mess->ciaddr, netid)) ||
          !(opt = option_find(mess, sz, OPTION_SERVER_IDENTIFIER, INADDRSZ)) ||
-         option_addr(opt).s_addr != server_id(context, override).s_addr)
+         option_addr(opt).s_addr != server_id(context, override, fallback).s_addr)
        return 0;
       
       if (lease && lease->addr.s_addr == mess->ciaddr.s_addr)
@@ -781,7 +813,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4));
       clear_packet(mess, end, agent_id);
       option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPOFFER);
-      option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override).s_addr));
+      option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
       option_put(mess, end, OPTION_LEASE_TIME, 4, time);
       /* T1 and T2 are required in DHCPOFFER by HP's wacky Jetdirect client. */
       if (time != 0xffffffff)
@@ -950,8 +982,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
          mess->yiaddr.s_addr = 0;
          clear_packet(mess, end, agent_id);
          option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPNAK);
-         option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, 
-                    ntohl(server_id(context, override).s_addr ? server_id(context, override).s_addr : fallback.s_addr));
+         option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
          option_put_string(mess, end, OPTION_MESSAGE, message, borken_opt);
          /* DHCPNAK gets agent-id too */
          restore_agent_id(agent_id, mess, end);
@@ -1038,7 +1069,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
          
          clear_packet(mess, end, agent_id);
          option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK);
-         option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override).s_addr));
+         option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
          option_put(mess, end, OPTION_LEASE_TIME, 4, time);
          if (time != 0xffffffff)
            {
@@ -1059,9 +1090,11 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
       
       log_packet("INFORM", &mess->ciaddr, emac, emac_len, iface_name, message);
      
-      if (message || mess->ciaddr.s_addr == 0 || 
-         !(context = narrow_context(context, mess->ciaddr, netid)))
+      if (message || mess->ciaddr.s_addr == 0)
        return 0;
+
+      /* For DHCPINFORM only, cope without a valid context */
+      context = narrow_context(context, mess->ciaddr, netid);
       
       /* Find a least based on IP address if we didn't
         get one from MAC address/client-d */
@@ -1075,7 +1108,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 
       log_packet("ACK", &mess->ciaddr, emac, emac_len, iface_name, hostname);
       
-      if (context->netid.net)
+      if (context && context->netid.net)
        {
          context->netid.next = netid;
          netid = &context->netid;
@@ -1091,8 +1124,8 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
 
       clear_packet(mess, end, agent_id);
       option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK);
-      option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override).s_addr));
-
+      option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr));
+      
       if (lease)
        {
          if (lease->expires == 0)
@@ -1164,12 +1197,14 @@ static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config *
   return time;
 }
 
-static struct in_addr server_id(struct dhcp_context *context, struct in_addr override)
+static struct in_addr server_id(struct dhcp_context *context, struct in_addr override, struct in_addr fallback)
 {
-  if (override.s_addr != 0 || !context)
+  if (override.s_addr != 0)
     return override;
-  else 
+  else if (context)
     return context->local;
+  else
+    return fallback;
 }
 
 static int sanitise(unsigned char *opt, char *buf)
@@ -1476,7 +1511,7 @@ static void option_put_string(struct dhcp_packet *mess, unsigned char *end, int
 }
 
 /* return length, note this only does the data part */
-static int do_opt(struct dhcp_opt *opt, unsigned char *p, struct in_addr local, int null_term)
+static int do_opt(struct dhcp_opt *opt, unsigned char *p, struct dhcp_context *context, int null_term)
 {
   int len = opt->len;
   
@@ -1485,7 +1520,7 @@ static int do_opt(struct dhcp_opt *opt, unsigned char *p, struct in_addr local,
 
   if (p && len != 0)
     {
-      if ((opt->flags & DHOPT_ADDR) && !(opt->flags & DHOPT_ENCAPSULATE))
+      if (context && (opt->flags & DHOPT_ADDR))
        {
          int j;
          struct in_addr *a = (struct in_addr *)opt->val;
@@ -1493,7 +1528,7 @@ static int do_opt(struct dhcp_opt *opt, unsigned char *p, struct in_addr local,
            {
              /* zero means "self" (but not in vendorclass options.) */
              if (a->s_addr == 0)
-               memcpy(p, &local, INADDRSZ);
+               memcpy(p, &context->local, INADDRSZ);
              else
                memcpy(p, a, INADDRSZ);
              p += INADDRSZ;
@@ -1524,7 +1559,7 @@ static struct dhcp_opt *option_find2(struct dhcp_netid *netid, struct dhcp_opt *
 {
   struct dhcp_opt *tmp;  
   for (tmp = opts; tmp; tmp = tmp->next)
-    if (tmp->opt == opt && !(tmp->flags & DHOPT_ENCAPSULATE))
+    if (tmp->opt == opt && !(tmp->flags & (DHOPT_ENCAPSULATE | DHOPT_VENDOR)))
       if (match_netid(tmp->netid, netid, 1) || match_netid(tmp->netid, netid, 0))
        return tmp;
              
@@ -1537,22 +1572,66 @@ static void match_vendor_opts(unsigned char *opt, struct dhcp_opt *dopt)
 {
   for (; dopt; dopt = dopt->next)
     {
-      dopt->flags &= ~DHOPT_VENDOR_MATCH;
-      if (opt && (dopt->flags & DHOPT_ENCAPSULATE))
+      dopt->flags &= ~(DHOPT_ENCAP_MATCH | DHOPT_ENCAP_DONE);
+      if (opt && (dopt->flags & DHOPT_VENDOR))
        {
          int i, len = 0;
-         if (dopt->vendor_class)
-           len = strlen((char *)dopt->vendor_class);
+         if (dopt->u.vendor_class)
+           len = strlen((char *)dopt->u.vendor_class);
          for (i = 0; i <= (option_len(opt) - len); i++)
-           if (len == 0 || memcmp(dopt->vendor_class, option_ptr(opt, i), len) == 0)
+           if (len == 0 || memcmp(dopt->u.vendor_class, option_ptr(opt, i), len) == 0)
              {
-               dopt->flags |= DHOPT_VENDOR_MATCH;
+               dopt->flags |= DHOPT_ENCAP_MATCH;
                break;
              }
        }
     }
 }
 
+static void do_encap_opts(int encap, struct dhcp_packet *mess, unsigned char *end, int null_term)
+{
+  int len, enc_len;
+  struct dhcp_opt *opt, *start;
+  unsigned char *p;
+    
+  /* find size in advance */
+  for (enc_len = 0, start = opt = daemon->dhcp_opts; opt; opt = opt->next)
+    if (opt->flags & DHOPT_ENCAP_MATCH)
+      {
+       int new = do_opt(opt, NULL, NULL, null_term) + 2;
+       if (enc_len + new <= 255)
+         enc_len += new;
+       else
+         {
+           p = free_space(mess, end, encap, enc_len);
+           for (; start && start != opt; start = start->next)
+             if (p && (start->flags & DHOPT_ENCAP_MATCH))
+               {
+                 len = do_opt(start, p + 2, NULL, null_term);
+                 *(p++) = start->opt;
+                 *(p++) = len;
+                 p += len;
+               }
+           enc_len = new;
+           start = opt;
+         }
+      }
+  
+  if (enc_len != 0 &&
+      (p = free_space(mess, end, encap, enc_len + 1)))
+    {
+      for (; start; start = start->next)
+       if (start->flags & DHOPT_ENCAP_MATCH)
+         {
+           len = do_opt(start, p + 2, NULL, null_term);
+           *(p++) = start->opt;
+           *(p++) = len;
+           p += len;
+         }
+      *p = OPTION_END;
+    }
+}
+
 static void clear_packet(struct dhcp_packet *mess, unsigned char *end, unsigned char *agent_id)
 {
   /* don't clear agent_id */
@@ -1629,7 +1708,8 @@ static void do_options(struct dhcp_context *context,
       if (match_netid(boot->netid, netid, 1))
        break;
   
-  mess->siaddr = context->local;
+  if (context)
+    mess->siaddr = context->local;
   
   /* See if we can send the boot stuff as options.
      To do this we need a requested option list, BOOTP
@@ -1713,27 +1793,31 @@ static void do_options(struct dhcp_context *context,
   /* rfc3011 says this doesn't need to be in the requested options list. */
   if (subnet_addr.s_addr)
     option_put(mess, end, OPTION_SUBNET_SELECT, INADDRSZ, ntohl(subnet_addr.s_addr));
-
-  if (!option_find2(netid, config_opts, OPTION_NETMASK))
-    option_put(mess, end, OPTION_NETMASK, INADDRSZ, ntohl(context->netmask.s_addr));
-  
-  /* May not have a "guessed" broadcast address if we got no packets via a relay
-     from this net yet (ie just unicast renewals after a restart */
-  if (context->broadcast.s_addr &&
-      !option_find2(netid, config_opts, OPTION_BROADCAST))
-    option_put(mess, end, OPTION_BROADCAST, INADDRSZ, ntohl(context->broadcast.s_addr));
   
-  /* Same comments as broadcast apply, and also may not be able to get a sensible
-     default when using subnet select.  User must configure by steam in that case. */
-  if (context->router.s_addr &&
-      in_list(req_options, OPTION_ROUTER) &&
-      !option_find2(netid, config_opts, OPTION_ROUTER))
-    option_put(mess, end, OPTION_ROUTER, INADDRSZ, ntohl(context->router.s_addr));
-
-  if (in_list(req_options, OPTION_DNSSERVER) &&
-      !option_find2(netid, config_opts, OPTION_DNSSERVER))
-    option_put(mess, end, OPTION_DNSSERVER, INADDRSZ, ntohl(context->local.s_addr));
+  /* replies to DHCPINFORM may not have a valid context */
+  if (context)
+    {
+      if (!option_find2(netid, config_opts, OPTION_NETMASK))
+       option_put(mess, end, OPTION_NETMASK, INADDRSZ, ntohl(context->netmask.s_addr));
   
+      /* May not have a "guessed" broadcast address if we got no packets via a relay
+        from this net yet (ie just unicast renewals after a restart */
+      if (context->broadcast.s_addr &&
+         !option_find2(netid, config_opts, OPTION_BROADCAST))
+       option_put(mess, end, OPTION_BROADCAST, INADDRSZ, ntohl(context->broadcast.s_addr));
+      
+      /* Same comments as broadcast apply, and also may not be able to get a sensible
+        default when using subnet select.  User must configure by steam in that case. */
+      if (context->router.s_addr &&
+         in_list(req_options, OPTION_ROUTER) &&
+         !option_find2(netid, config_opts, OPTION_ROUTER))
+       option_put(mess, end, OPTION_ROUTER, INADDRSZ, ntohl(context->router.s_addr));
+      
+      if (in_list(req_options, OPTION_DNSSERVER) &&
+         !option_find2(netid, config_opts, OPTION_DNSSERVER))
+       option_put(mess, end, OPTION_DNSSERVER, INADDRSZ, ntohl(context->local.s_addr));
+    }
+
   if (domain && in_list(req_options, OPTION_DOMAINNAME) && 
       !option_find2(netid, config_opts, OPTION_DOMAINNAME))
     option_put_string(mess, end, OPTION_DOMAINNAME, domain, null_term);
@@ -1747,7 +1831,8 @@ static void do_options(struct dhcp_context *context,
       
       if (fqdn_flags != 0)
        {
-         int len = strlen(hostname) + 3;
+         len = strlen(hostname) + 3;
+         
          if (fqdn_flags & 0x04)
            len += 2;
          else if (null_term)
@@ -1825,12 +1910,12 @@ static void do_options(struct dhcp_context *context,
        continue;
       
       /* always force null-term for filename ans servername - buggy PXE again. */
-      len = do_opt(opt, NULL, context->local
+      len = do_opt(opt, NULL, context, 
                   (optno == OPTION_SNAME || optno == OPTION_FILENAME) ? 1 : null_term);
 
       if ((p = free_space(mess, end, optno, len)))
        {
-         do_opt(opt, p, context->local
+         do_opt(opt, p, context, 
                 (optno == OPTION_SNAME || optno == OPTION_FILENAME) ? 1 : null_term);
          
          /* If we send a vendor-id, revisit which vendor-ops we consider 
@@ -1840,59 +1925,48 @@ static void do_options(struct dhcp_context *context,
        }  
     }
 
-  /* prune encapsulated options based on netid, and look if we're forcing them to be sent */
+  /* prune vendor-encapsulated options based on netid, and look if we're forcing them to be sent */
   for (opt = config_opts; opt; opt = opt->next)
-    if (opt->flags & DHOPT_VENDOR_MATCH)
+    if (opt->flags & DHOPT_ENCAP_MATCH)
       {
        if (!match_netid(opt->netid, netid, 1) && !match_netid(opt->netid, netid, 0))
-         opt->flags &= ~DHOPT_VENDOR_MATCH;
+         opt->flags &= ~DHOPT_ENCAP_MATCH;
        else if (opt->flags & DHOPT_FORCE)
          force_encap = 1;
       }
   
   if (force_encap || in_list(req_options, OPTION_VENDOR_CLASS_OPT))
-    {
-      int enc_len = 0;
-      struct dhcp_opt *start;
-
-      /* find size in advance */
-      for (start = opt = config_opts; opt; opt = opt->next)
-       if (opt->flags & DHOPT_VENDOR_MATCH)
+    do_encap_opts(OPTION_VENDOR_CLASS_OPT, mess, end, null_term);
+  
+  /* Now send options to be encapsulated in arbitrary options, 
+     eg dhcp-option=encap:172,17,.......
+     The may be more that one "outer" to do, so group
+     all the options which match each outer in turn. */
+  for (opt = config_opts; opt; opt = opt->next)
+    if ((opt->flags & (DHOPT_ENCAPSULATE | DHOPT_ENCAP_DONE)) ==  DHOPT_ENCAPSULATE)
+      {
+       struct dhcp_opt *o;
+       int found = 0;
+       
+       for (o = config_opts; o; o = o->next)
          {
-           int new = do_opt(opt, NULL, context->local, null_term) + 2;
-           if (enc_len + new <= 255)
-             enc_len += new;
-           else
+           o->flags &= ~DHOPT_ENCAP_MATCH;
+           if ((o->flags & DHOPT_ENCAPSULATE) && opt->u.encap == o->u.encap)
              {
-               p = free_space(mess, end, OPTION_VENDOR_CLASS_OPT, enc_len);
-               for (; start && start != opt; start = start->next)
-                 if (p && (start->flags & DHOPT_VENDOR_MATCH))
-                   {
-                     len = do_opt(start, p + 2, context->local, null_term);
-                     *(p++) = start->opt;
-                     *(p++) = len;
-                     p += len;
-                   }
-               enc_len = new;
-               start = opt;
+               o->flags |= DHOPT_ENCAP_DONE;
+               if ((match_netid(o->netid, netid, 1) || match_netid(o->netid, netid, 0)) &&
+                   (o->flags & DHOPT_FORCE || in_list(req_options, o->u.encap)))
+                 {
+                   o->flags |= DHOPT_ENCAP_MATCH;
+                   found = 1;
+                 }
              }
          }
-             
-      if (enc_len != 0 &&
-         (p = free_space(mess, end, OPTION_VENDOR_CLASS_OPT, enc_len + 1)))
-       {
-         for (; start; start = start->next)
-           if (start->flags & DHOPT_VENDOR_MATCH)
-             {
-                len = do_opt(start, p + 2, context->local, null_term);
-                *(p++) = start->opt;
-                *(p++) = len;
-                p += len;
-             }
-         *p = OPTION_END;
-       }
-    }
-  
+       
+       if (found)
+         do_encap_opts(opt->u.encap, mess, end, null_term);
+      }
+
   /* move agent_id back down to the end of the packet */
   restore_agent_id(agent_id, mess, real_end);
 
index 268c7962aeee08ff64103ae2e7b05e2ed868d11a..d97845e3c8dfc28a4255c57d1fa222b100c72f22 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -10,8 +10,8 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
      
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "dnsmasq.h"
index 240c3b84c20072ade35a4f963e5fbeabe5012bab..f060a9f8692266678dfe1fe4c84252e5a611a74f 100644 (file)
@@ -1,4 +1,4 @@
-/* dnsmasq is Copyright (c) 2000-2008 Simon Kelley
+/* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -9,13 +9,11 @@
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-     
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+      
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-/* Some code in this file contributed by Rob Funk. */
-
 /* The SURF random number generator was taken from djbdns-1.05, by 
    Daniel J Berstein, which is public domain. */