- Made Makefile.am stub for doc/es/
authorGuus Sliepen <guus@tinc-vpn.org>
Fri, 20 Oct 2000 16:49:20 +0000 (16:49 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Fri, 20 Oct 2000 16:49:20 +0000 (16:49 +0000)
- Merged genauth into tincd
- Updated dutch translation

doc/es/Makefile.am [new file with mode: 0644]
lib/list.c [new file with mode: 0644]
lib/list.h [new file with mode: 0644]
po/POTFILES.in
po/es.po
po/nl.po
src/Makefile.am
src/genauth.c [deleted file]
src/tincd.c

diff --git a/doc/es/Makefile.am b/doc/es/Makefile.am
new file mode 100644 (file)
index 0000000..756d670
--- /dev/null
@@ -0,0 +1,3 @@
+## Process this file with automake to get Makefile.in
+
+# Nothing to see here, go away!
diff --git a/lib/list.c b/lib/list.c
new file mode 100644 (file)
index 0000000..5358f19
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+    list.c -- functions to deal with double linked lists
+    Copyright (C) 2000 Ivo Timmermans <itimmermans@bigfoot.com>
+                  2000 Guus Sliepen <guus@sliepen.warande.net>
+
+    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
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    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, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id: list.c,v 1.1 2000/10/20 16:44:32 zarq Exp $
+*/
+
+#include "config.h"
+
+#include <string.h>
+
+#include <error.h>
+#include <list.h>
+#include <xalloc.h>
+
+#include <system.h>
+
+/*
+  list_new
+
+  Initialize a new list.
+*/
+list_t *list_new(void)
+{
+  list_t *list;
+
+  list = xmalloc_and_zero(sizeof(list_t));
+  return list;
+}
+
+/*
+  list_delete
+
+  Delete the element pointed to by idx from the list.
+*/
+list_node_t *list_delete(list_t *list, list_node_t *idx)
+{
+  list_node_t *res;
+  
+  if(!list)
+    return NULL;
+  if(!idx)
+    return NULL;
+
+  if(list->callbacks->delete != NULL)
+    if(list->callbacks->delete(idx->data))
+      error(ERR_WARNING, N_("List callback[delete] failed for %08lx - freeing anyway"), idx->data);
+  
+  free(idx->data);
+  
+  if(idx->prev == NULL)
+    /* First element in list */
+    {
+      res = idx->next;
+      list->head = idx->next;
+    }
+  if(idx->next == NULL)
+    /* Last element in list */
+    {
+      res = NULL;
+      list->tail = idx->prev;
+    }
+  if(idx->prev != NULL && idx->next != NULL)
+    /* Neither first nor last element */
+    {
+      idx->prev->next = idx->next;
+      idx->next->prev = idx->prev;
+    }
+  if(list->head == NULL)
+    list->tail = NULL;
+  else
+    if(list->tail == NULL)
+      list->head = NULL;
+  free(idx);
+  return res;
+}
+
+/*
+  list_forall_nodes
+
+  Call function() on each element in the list.  If this function
+  returns non-zero, the element will be removed from the list.
+*/
+void list_forall_nodes(list_t *list, int (*function)(void *data))
+{
+  list_node_t *p;
+  int res;
+  
+  if(!list)       /* no list given */
+    return;
+  if(!function)   /* no function given */
+    return;
+  if(!list->head) /* list is empty */
+    return;
+  for(p = list->head; p != NULL; p = p->next)
+    {
+      res = function(p->data);
+      if(res != 0)
+       p = list_delete(list, p);
+    }
+}
+
+/*
+  list_destroy
+
+  Free all datastructures contained in this list.  It uses the delete
+  callback for this list to free each element.
+*/
+void list_destroy(list_t *list)
+{
+  if(!list)
+    return;
+  list_destroy_nodes(list);
+  free(list);
+}
+
+/*
+  list_append
+
+  Append a new node to the list that points to data.
+*/
+list_append(list_t *list, void *data)
+{
+  list_node_t *n;
+
+  n = xmalloc_and_zero(sizeof(list_node_t));
+  n->data = data;
+  n->prev = list->tail;
+  list->tail->next = n;
+  list->tail = n;
+}
diff --git a/lib/list.h b/lib/list.h
new file mode 100644 (file)
index 0000000..9162833
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    list.h -- header file for list.c
+    Copyright (C) 2000 Ivo Timmermans <itimmermans@bigfoot.com>
+                  2000 Guus Sliepen <guus@sliepen.warande.net>
+
+    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
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    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, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id: list.h,v 1.1 2000/10/20 16:44:32 zarq Exp $
+*/
+
+#ifndef __TINC_LIST_H__
+#define __TINC_LIST_H__
+
+typedef struct list_callbacks_t {
+  int (*delete) (void *);
+} list_callbacks_t;
+
+typedef struct list_node_t {
+  void *data;
+  struct list_node_t *prev;
+  struct list_node_t *next;
+} list_node_t;
+
+typedef struct list_t {
+  list_node_t *head;
+  list_node_t *tail;
+  list_callbacks_t *callbacks;
+} list_t;
+
+
+
+#endif /* __TINC_LIST_H__ */
index df8b507..5e6af89 100644 (file)
@@ -6,7 +6,6 @@
 lib/pidfile.c
 lib/utils.c
 src/conf.c
-src/genauth.c
 src/meta.c
 src/net.c
 src/netutl.c
index 6076a85..5940438 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: tinc 1.0pre2\n"
-"POT-Creation-Date: 2000-10-15 02:53+0200\n"
+"POT-Creation-Date: 2000-10-20 18:35+0200\n"
 "PO-Revision-Date: 2000-07-02 12:49+01:00\n"
 "Last-Translator: Enrique Zanardi <ezanardi@id-agora.com>\n"
 "Language-Team: Spanish <debian-l10n-spanish@lists.debian.org>\n"
@@ -33,37 +33,6 @@ msgstr ""
 msgid "Invalid value for variable on line %d while reading config file %s"
 msgstr ""
 
-#: src/genauth.c:78
-#, c-format
-msgid "Usage: %s bits\n"
-msgstr "Uso: %s bits\n"
-
-#: src/genauth.c:89
-#, c-format
-msgid "Illegal number: %s\n"
-msgstr "Número ilegal: %s\n"
-
-#. Align to bytes for easy mallocing and reading
-#: src/genauth.c:95
-#, fuzzy, c-format
-msgid "Generating %d bits keys:\n"
-msgstr "Generando claves de %d bits."
-
-#: src/genauth.c:99
-#, fuzzy
-msgid "Done.\n"
-msgstr ": hecho.\n"
-
-#: src/genauth.c:101
-#, c-format
-msgid "Public key:\t%s\n"
-msgstr ""
-
-#: src/genauth.c:102
-#, c-format
-msgid "Private key:\t%s\n"
-msgstr ""
-
 #: src/meta.c:42
 #, fuzzy, c-format
 msgid "Sending %d bytes of metadata to %s (%s): %s"
@@ -74,7 +43,7 @@ msgstr "Enviados %d bytes a %lx"
 msgid "Sending meta data to %s (%s) failed: %m"
 msgstr "Error enviando datos: %m"
 
-#: src/meta.c:85 src/net.c:773
+#: src/meta.c:85 src/net.c:847
 #, fuzzy, c-format
 msgid "This is a bug: %s:%d: %d:%m %s (%s)"
 msgstr "Esto es un `bug': %s:%d: %d:%m"
@@ -104,278 +73,300 @@ msgstr "Petici
 msgid "Metadata read buffer overflow for %s (%s)"
 msgstr "Desbordamiento del búfer de lectura de metadatos"
 
-#: src/net.c:106
+#: src/net.c:107
 #, fuzzy, c-format
 msgid "Sending packet of %d bytes to %s (%s)"
 msgstr "Enviados %d bytes a %lx"
 
-#: src/net.c:115
+#: src/net.c:116
 #, fuzzy, c-format
 msgid "Error sending packet to %s (%s): %m"
 msgstr "Error enviando datos: %m"
 
-#: src/net.c:129
+#: src/net.c:130
 #, fuzzy, c-format
 msgid "Receiving packet of %d bytes"
 msgstr "Recibiendo clave de "
 
-#: src/net.c:142
+#: src/net.c:143
 #, c-format
 msgid "Can't write to tap device: %m"
 msgstr "No puedo escribir en el dispositivo tap: %m"
 
-#: src/net.c:242
+#: src/net.c:243
 #, fuzzy
 msgid "Queue flushed"
 msgstr "cola vaciada"
 
-#: src/net.c:257
+#: src/net.c:258
 #, fuzzy, c-format
 msgid "Flushing send queue for %s (%s)"
 msgstr "Vaciando la cola de envíos para "
 
-#: src/net.c:265
+#: src/net.c:266
 #, fuzzy, c-format
 msgid "Flushing receive queue for %s (%s)"
 msgstr "Vaciando la cola de recepción para "
 
-#: src/net.c:283
+#: src/net.c:284
 #, c-format
 msgid "Trying to look up %d.%d.%d.%d in connection list failed!"
 msgstr ""
 
-#: src/net.c:297
+#: src/net.c:298
 #, fuzzy, c-format
 msgid "Could not open UDP connection to %s (%s)"
 msgstr "No pude abrir %s: %s\n"
 
-#: src/net.c:305
+#: src/net.c:306
 #, c-format
 msgid "No valid key known yet for %s (%s), queueing packet"
 msgstr ""
 
-#: src/net.c:316
+#: src/net.c:317
 #, c-format
 msgid "%s (%s) is not ready, queueing packet"
 msgstr ""
 
-#: src/net.c:344
+#: src/net.c:352
 #, c-format
 msgid "Could not open %s: %m"
 msgstr "No pude abrir %s: %m"
 
-#: src/net.c:360
+#: src/net.c:370
 #, c-format
 msgid "%s is a new style tun/tap device"
 msgstr ""
 
-#: src/net.c:362
+#: src/net.c:373
 msgid "tun/tap device will be left unconfigured"
 msgstr ""
 
-#: src/net.c:384
+#: src/net.c:396
 #, c-format
 msgid "Creating metasocket failed: %m"
 msgstr "Fallo al crear el metasocket: %m"
 
-#: src/net.c:390 src/net.c:396 src/net.c:458
+#: src/net.c:402 src/net.c:408 src/net.c:470
 #, c-format
 msgid "setsockopt: %m"
 msgstr "setsockopt(): %m"
 
-#: src/net.c:403 src/net.c:465
+#: src/net.c:415 src/net.c:477
 #, c-format
 msgid "fcntl: %m"
 msgstr "fcntl(): %m"
 
-#: src/net.c:411
+#: src/net.c:423
 #, c-format
 msgid "Unable to bind listen socket to interface %s: %m"
 msgstr ""
 
-#: src/net.c:427
+#: src/net.c:439
 #, c-format
 msgid "Can't bind to port %hd/tcp: %m"
 msgstr "Ha fallado la llamada a bind() con el puerto %hd/tcp: %m"
 
-#: src/net.c:433
+#: src/net.c:445
 #, c-format
 msgid "listen: %m"
 msgstr "listen(): %m"
 
-#: src/net.c:452
+#: src/net.c:464
 #, c-format
 msgid "Creating socket failed: %m"
 msgstr "Error al crear el `socket': %m"
 
-#: src/net.c:476
+#: src/net.c:488
 #, c-format
 msgid "Can't bind to port %hd/udp: %m"
 msgstr "Ha fallado la llamada a bind() con el puerto %hd/udp: %m"
 
-#: src/net.c:493
+#: src/net.c:505
 #, fuzzy, c-format
 msgid "Trying to connect to %s"
 msgstr "Cerrando conexión con %s."
 
-#: src/net.c:503
+#: src/net.c:515
 #, fuzzy, c-format
 msgid "Creating socket for %s port %d failed: %m"
 msgstr "Error al crear el `socket': %m"
 
-#: src/net.c:514
+#: src/net.c:526
 #, c-format
 msgid "%s port %hd: %m"
 msgstr ""
 
-#: src/net.c:521
+#: src/net.c:533
 #, c-format
 msgid "fcntl for %s port %d: %m"
 msgstr ""
 
-#: src/net.c:527
+#: src/net.c:539
 #, fuzzy, c-format
 msgid "Connected to %s port %hd"
 msgstr "Conectado a %s:%hd"
 
-#: src/net.c:547
+#: src/net.c:562
+msgid "Invalid name for outgoing connection"
+msgstr ""
+
+#: src/net.c:571
+#, c-format
+msgid "Error reading host configuration file for %s"
+msgstr ""
+
+#: src/net.c:578
+#, c-format
+msgid "No address specified for %s"
+msgstr ""
+
+#: src/net.c:585
 #, fuzzy, c-format
 msgid "Error looking up `%s': %m"
 msgstr "Error buscando `%s': %s\n"
 
-#: src/net.c:557
+#: src/net.c:595
 #, fuzzy, c-format
 msgid "Could not set up a meta connection to %s"
 msgstr "No he podido configurar una meta conexión."
 
-#: src/net.c:586
+#: src/net.c:629
 msgid "Name for tinc daemon required!"
 msgstr ""
 
-#: src/net.c:594
+#: src/net.c:637
 msgid "Invalid name for myself!"
 msgstr ""
 
-#: src/net.c:600
+#: src/net.c:643
+msgid "Private key for tinc daemon required!"
+msgstr ""
+
+#: src/net.c:655
 msgid "Cannot open host configuration file for myself!"
 msgstr ""
 
-#: src/net.c:619
+#: src/net.c:661
+msgid "Public key for tinc daemon required!"
+msgstr ""
+
+#: src/net.c:690
 #, fuzzy
 msgid "Unable to set up a listening socket!"
 msgstr "No puedo configurar un `socket' a la escucha"
 
-#: src/net.c:625
+#: src/net.c:696
 #, fuzzy
 msgid "Unable to set up an incoming vpn data socket!"
 msgstr "No puedo configurar un `socket' para recibir datos de la vpn"
 
-#: src/net.c:632
+#: src/net.c:703
 #, fuzzy, c-format
 msgid "Ready: listening on port %hd"
 msgstr "Listo: escuchando en el puerto %d."
 
-#: src/net.c:660
+#: src/net.c:734
 #, fuzzy, c-format
 msgid "Still failed to connect to other, will retry in %d seconds"
 msgstr "Siguo sin poder conectar con el otro. Lo reintentaré en %d segundos."
 
-#: src/net.c:698
+#: src/net.c:772
 #, fuzzy, c-format
 msgid "Trying to re-establish outgoing connection in %d seconds"
 msgstr "Intento re-establecer la conexión saliente en 5 segundos."
 
-#: src/net.c:736
+#: src/net.c:810
 #, fuzzy
 msgid "Terminating"
 msgstr "Terminando."
 
-#: src/net.c:750
+#: src/net.c:824
 #, fuzzy, c-format
 msgid "Opening UDP socket to %s"
 msgstr "Abriendo `socket' UDP a "
 
-#: src/net.c:755
+#: src/net.c:829
 #, fuzzy, c-format
 msgid "Creating UDP socket failed: %m"
 msgstr "Error al crear el `socket': %m"
 
-#: src/net.c:765
+#: src/net.c:839
 #, fuzzy, c-format
 msgid "Connecting to %s port %d failed: %m"
 msgstr "Error al crear `socket' de datos: %m"
 
-#: src/net.c:798
+#: src/net.c:872
 #, c-format
 msgid "Error: getpeername: %m"
 msgstr "Error: getpeername(): %m"
 
-#: src/net.c:813
+#: src/net.c:887
 #, fuzzy, c-format
 msgid "Connection from %s port %d"
 msgstr "Conexión desde %s:%d"
 
-#: src/net.c:861
+#: src/net.c:931
 #, fuzzy, c-format
 msgid "This is a bug: %s:%d: %d:%m"
 msgstr "Esto es un `bug': %s:%d: %d:%m"
 
-#: src/net.c:867
+#: src/net.c:937
 #, fuzzy, c-format
 msgid "Incoming data socket error: %s"
 msgstr "Error en el `socket' de recepción de datos: %s"
 
-#: src/net.c:873
+#: src/net.c:943
 #, fuzzy, c-format
 msgid "Receiving packet failed: %m"
 msgstr "Error recibiendo datos: %m"
 
-#: src/net.c:894
+#: src/net.c:964
 #, fuzzy, c-format
 msgid "Closing connection with %s (%s)"
 msgstr "Cerrando conexión con %s."
 
-#: src/net.c:937
+#: src/net.c:1007
 #, fuzzy
 msgid "Trying to re-establish outgoing connection in 5 seconds"
 msgstr "Intento re-establecer la conexión saliente en 5 segundos."
 
-#: src/net.c:967
+#: src/net.c:1037
 #, c-format
 msgid "%s (%s) didn't respond to PING"
 msgstr ""
 
-#: src/net.c:998
+#: src/net.c:1068
 #, c-format
 msgid "Accepting a new connection failed: %m"
 msgstr "Error al aceptar una nueva conexión: %m"
 
-#: src/net.c:1006
+#: src/net.c:1076
 #, fuzzy
 msgid "Closed attempted connection"
 msgstr "Se ha cerrado la conexión que se intentaba realizar."
 
-#: src/net.c:1041
+#: src/net.c:1111
 #, fuzzy, c-format
 msgid "Outgoing data socket error for %s (%s): %s"
 msgstr "Error en el `socket' de datos salientes: %s"
 
-#: src/net.c:1077
+#: src/net.c:1150 src/net.c:1159
 #, c-format
 msgid "Error while reading from tapdevice: %m"
 msgstr "Error leyendo del dispositivo tap: %m"
 
-#: src/net.c:1087
+#: src/net.c:1171
 #, fuzzy, c-format
 msgid "Non-IP ethernet frame %04x from %02x:%02x:%02x:%02x:%02x:%02x"
 msgstr "Trama ethernet no-IP %04x de "
 
-#: src/net.c:1094
+#: src/net.c:1178
 #, c-format
 msgid "Dropping short packet from %02x:%02x:%02x:%02x:%02x:%02x"
 msgstr ""
 
-#: src/net.c:1133
+#: src/net.c:1213
 #, c-format
 msgid "Error while waiting for input: %m"
 msgstr "Error esperando entrada: %m"
@@ -415,275 +406,285 @@ msgstr "Error al procesar la petici
 msgid "Bogus data received from %s (%s)"
 msgstr "Se han recibido datos sin sentido."
 
-#: src/protocol.c:167
+#: src/protocol.c:170
 #, fuzzy, c-format
 msgid "Got bad ID from %s"
 msgstr "recibí una petición BASIC_INFO incorrecta: %s"
 
-#: src/protocol.c:175
+#: src/protocol.c:178
 #, fuzzy, c-format
 msgid "Peer %s (%s) uses incompatible version %d"
 msgstr ""
 "La máquina remota usa una versión incompatible del protocolo (versión %d)."
 
-#: src/protocol.c:184
+#: src/protocol.c:187
 #, c-format
 msgid "Peer %s uses invalid identity name"
 msgstr ""
 
-#: src/protocol.c:192
+#: src/protocol.c:195
 #, c-format
 msgid "Peer %s had unknown identity (%s)"
 msgstr ""
 
-#: src/protocol.c:207
+#: src/protocol.c:209
 #, c-format
 msgid "Uplink %s (%s) is already in our connection list"
 msgstr ""
 
-#: src/protocol.c:253
+#: src/protocol.c:219
+#, c-format
+msgid "No public key known for %s (%s)"
+msgstr ""
+
+#: src/protocol.c:258 src/protocol.c:312
+#, c-format
+msgid "Error during encryption of challenge for %s (%s)"
+msgstr ""
+
+#: src/protocol.c:284
 #, fuzzy, c-format
 msgid "Got bad CHALLENGE from %s (%s)"
 msgstr "recibí KEY_CHANGED de "
 
-#: src/protocol.c:261
+#: src/protocol.c:294
 #, c-format
 msgid "Intruder: wrong challenge length from %s (%s)"
 msgstr ""
 
-#: src/protocol.c:287
+#: src/protocol.c:330
 #, c-format
 msgid "Trying to send CHAL_REPLY to %s (%s) without a valid CHALLENGE"
 msgstr ""
 
-#: src/protocol.c:318
+#: src/protocol.c:361
 #, fuzzy, c-format
 msgid "Got bad CHAL_REPLY from %s (%s)"
 msgstr "recibí una petición ANS_KEY incorrecta: %s"
 
-#: src/protocol.c:327
+#: src/protocol.c:370
 #, c-format
 msgid "Intruder: wrong challenge reply length from %s (%s)"
 msgstr ""
 
-#: src/protocol.c:344
+#: src/protocol.c:387
 #, c-format
 msgid "Intruder: wrong challenge reply from %s (%s)"
 msgstr ""
 
-#: src/protocol.c:386
+#: src/protocol.c:425
 #, c-format
 msgid "Removing old entry for %s at %s in favour of new connection from %s"
 msgstr ""
 
-#: src/protocol.c:398
+#: src/protocol.c:437
 #, fuzzy, c-format
 msgid "Connection with %s (%s) activated"
 msgstr "Activada la conexión con %s."
 
-#: src/protocol.c:438
+#: src/protocol.c:477
 #, fuzzy, c-format
 msgid "Got bad ADD_SUBNET from %s (%s)"
 msgstr "recibí una petición ADD_HOST incorrecta: %s"
 
-#: src/protocol.c:447
+#: src/protocol.c:486
 #, fuzzy, c-format
 msgid "Got bad ADD_SUBNET from %s (%s): invalid identity name"
 msgstr "recibí una petición ADD_HOST incorrecta: %s"
 
-#: src/protocol.c:456
+#: src/protocol.c:495
 #, fuzzy, c-format
 msgid "Got bad ADD_SUBNET from %s (%s): invalid subnet string"
 msgstr "recibí una petición ADD_HOST incorrecta: %s"
 
-#: src/protocol.c:467
+#: src/protocol.c:506
 #, c-format
 msgid "Warning: got ADD_SUBNET from %s (%s) for ourself, restarting"
 msgstr ""
 
-#: src/protocol.c:478
+#: src/protocol.c:517
 #, c-format
 msgid "Got ADD_SUBNET for %s from %s (%s) which is not in our connection list"
 msgstr ""
 
-#: src/protocol.c:506
+#: src/protocol.c:545
 #, fuzzy, c-format
 msgid "Got bad DEL_SUBNET from %s (%s)"
 msgstr "recibí una petición DEL_HOST incorrecta: %s"
 
-#: src/protocol.c:515
+#: src/protocol.c:554
 #, fuzzy, c-format
 msgid "Got bad DEL_SUBNET from %s (%s): invalid identity name"
 msgstr "recibí una petición DEL_HOST incorrecta: %s"
 
-#: src/protocol.c:524
+#: src/protocol.c:563
 #, fuzzy, c-format
 msgid "Got bad DEL_SUBNET from %s (%s): invalid subnet string"
 msgstr "recibí una petición DEL_HOST incorrecta: %s"
 
-#: src/protocol.c:535
+#: src/protocol.c:574
 #, c-format
 msgid "Warning: got DEL_SUBNET from %s (%s) for ourself, restarting"
 msgstr ""
 
-#: src/protocol.c:546
+#: src/protocol.c:585
 #, c-format
 msgid "Got DEL_SUBNET for %s from %s (%s) which is not in our connection list"
 msgstr ""
 
-#: src/protocol.c:577
+#: src/protocol.c:616
 #, fuzzy, c-format
 msgid "Got bad ADD_HOST from %s (%s)"
 msgstr "recibí una petición ADD_HOST incorrecta: %s"
 
-#: src/protocol.c:585
+#: src/protocol.c:624
 #, fuzzy, c-format
 msgid "Got bad ADD_HOST from %s (%s): invalid identity name"
 msgstr "recibí una petición ADD_HOST incorrecta: %s"
 
-#: src/protocol.c:594
+#: src/protocol.c:633
 #, c-format
 msgid "Warning: got ADD_HOST from %s (%s) for ourself, restarting"
 msgstr ""
 
-#: src/protocol.c:604
+#: src/protocol.c:643
 #, c-format
 msgid "Warning: got ADD_HOST from %s (%s) from ourself, restarting"
 msgstr ""
 
-#: src/protocol.c:614
+#: src/protocol.c:653
 #, c-format
 msgid ""
 "Got ADD_HOST from %s (%s) with origin %s which is not in our connection list"
 msgstr ""
 
-#: src/protocol.c:633
+#: src/protocol.c:672
 #, c-format
 msgid "Got duplicate ADD_HOST for %s (%s) from %s (%s)"
 msgstr ""
 
-#: src/protocol.c:640
+#: src/protocol.c:679
 #, c-format
 msgid "Removing old entry for %s (%s)"
 msgstr ""
 
-#: src/protocol.c:683
+#: src/protocol.c:722
 #, fuzzy, c-format
 msgid "Got bad DEL_HOST from %s (%s)"
 msgstr "recibí una petición DEL_HOST incorrecta: %s"
 
-#: src/protocol.c:692
+#: src/protocol.c:731
 #, fuzzy, c-format
 msgid "Got bad DEL_HOST from %s (%s): invalid identity name"
 msgstr "recibí una petición DEL_HOST incorrecta: %s"
 
-#: src/protocol.c:701
+#: src/protocol.c:740
 #, c-format
 msgid "Warning: got DEL_HOST from %s (%s) for ourself, restarting"
 msgstr ""
 
-#: src/protocol.c:712
+#: src/protocol.c:751
 #, c-format
 msgid "Warning: got DEL_HOST from %s (%s) from ourself, restarting"
 msgstr ""
 
-#: src/protocol.c:722
+#: src/protocol.c:761
 #, c-format
 msgid ""
 "Got DEL_HOST from %s (%s) with origin %s which is not in our connection list"
 msgstr ""
 
-#: src/protocol.c:734
+#: src/protocol.c:773
 #, c-format
 msgid "Got DEL_HOST from %s (%s) for %s which is not in our connection list"
 msgstr ""
 
-#: src/protocol.c:744
+#: src/protocol.c:783
 #, fuzzy, c-format
 msgid "Got DEL_HOST from %s (%s) for %s which doesn't match"
 msgstr "recibí una petición DEL_HOST incorrecta: %s"
 
-#: src/protocol.c:776
+#: src/protocol.c:815
 #, fuzzy, c-format
 msgid "Got bad STATUS from %s (%s)"
 msgstr "recibí una petición ANS_KEY incorrecta: %s"
 
-#: src/protocol.c:783
+#: src/protocol.c:822
 #, fuzzy, c-format
 msgid "Status message from %s (%s): %s: %s"
 msgstr "He recibido una petición: %s"
 
-#: src/protocol.c:807
+#: src/protocol.c:846
 #, fuzzy, c-format
 msgid "Got bad ERROR from %s (%s)"
 msgstr "recibí una petición DEL_HOST incorrecta: %s"
 
-#: src/protocol.c:814
+#: src/protocol.c:853
 #, fuzzy, c-format
 msgid "Error message from %s (%s): %s: %s"
 msgstr "He recibido una petición: %s"
 
-#: src/protocol.c:892
+#: src/protocol.c:931
 #, fuzzy, c-format
 msgid "Got bad KEY_CHANGED from %s (%s)"
 msgstr "recibí KEY_CHANGED de "
 
-#: src/protocol.c:899
+#: src/protocol.c:938
 #, c-format
 msgid ""
 "Got KEY_CHANGED from %s (%s) origin %s which does not exist in our "
 "connection list"
 msgstr ""
 
-#: src/protocol.c:929
+#: src/protocol.c:968
 #, fuzzy, c-format
 msgid "Got bad REQ_KEY from %s (%s)"
 msgstr "recibí REQ_KEY de "
 
-#: src/protocol.c:936
+#: src/protocol.c:975
 #, c-format
 msgid ""
 "Got REQ_KEY from %s (%s) origin %s which does not exist in our connection "
 "list"
 msgstr ""
 
-#: src/protocol.c:952
+#: src/protocol.c:991
 #, c-format
 msgid ""
 "Got REQ_KEY from %s (%s) destination %s which does not exist in our "
 "connection list"
 msgstr ""
 
-#: src/protocol.c:980
+#: src/protocol.c:1019
 #, fuzzy, c-format
 msgid "Got bad ANS_KEY from %s (%s)"
 msgstr "recibí una petición ANS_KEY incorrecta: %s"
 
-#: src/protocol.c:987
+#: src/protocol.c:1026
 #, c-format
 msgid ""
 "Got ANS_KEY from %s (%s) origin %s which does not exist in our connection "
 "list"
 msgstr ""
 
-#: src/protocol.c:1003
+#: src/protocol.c:1042
 #, fuzzy, c-format
 msgid "Got bad ANS_KEY from %s (%s) origin %s: invalid key"
 msgstr "recibí una petición ANS_KEY incorrecta: %s"
 
-#: src/protocol.c:1016
+#: src/protocol.c:1055
 #, c-format
 msgid ""
 "Got ANS_KEY from %s (%s) destination %s which does not exist in our "
 "connection list"
 msgstr ""
 
-#: src/tincd.c:94
+#: src/tincd.c:99
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Pruebe `%s --help' para más información.\n"
 
-#: src/tincd.c:97
+#: src/tincd.c:102
 #, c-format
 msgid ""
 "Usage: %s [option]...\n"
@@ -692,7 +693,7 @@ msgstr ""
 "Modo de empleo: %s [opción]...\n"
 "\n"
 
-#: src/tincd.c:98
+#: src/tincd.c:103
 #, fuzzy
 msgid ""
 "  -c, --config=DIR      Read configuration options from DIR.\n"
@@ -700,7 +701,6 @@ msgid ""
 "  -d                    Increase debug level.\n"
 "  -k, --kill            Attempt to kill a running tincd and exit.\n"
 "  -n, --net=NETNAME     Connect to net NETNAME.\n"
-"  -t, --timeout=TIMEOUT Seconds to wait before giving a timeout.\n"
 msgstr ""
 "  -c, --config=FICHERO  Lee opciones de configuración del FICHERO.\n"
 "  -D, --no-detach       No hagas fork() y liberes la terminal.\n"
@@ -710,8 +710,10 @@ msgstr ""
 "  -t, --timeout=TIEMPO  Segundos a esperar antes de cancelar una "
 "trasmisión.\n"
 
-#: src/tincd.c:104
+#: src/tincd.c:108
+#, fuzzy
 msgid ""
+"  -K, --keygen[=BITS]   Generate public/private RSA keypair.\n"
 "      --help            Display this help and exit.\n"
 "      --version         Output version information and exit.\n"
 "\n"
@@ -720,72 +722,99 @@ msgstr ""
 "      --version         Muestra información de la versión y termina.\n"
 "\n"
 
-#: src/tincd.c:106
+#: src/tincd.c:111
 msgid "Report bugs to tinc@nl.linux.org.\n"
 msgstr "Comunicar `bugs' a tinc@nl.linux.org.\n"
 
-#: src/tincd.c:144
-#, c-format
-msgid "Invalid timeout value `%s'.\n"
-msgstr "Valor de `timeout' no válido `%s'.\n"
+#: src/tincd.c:152
+msgid "Invalid argument! BITS must be a number equal to or greater than 512.\n"
+msgstr ""
+
+#: src/tincd.c:207
+msgid ""
+"Seeding the PRNG: please press some keys or move\n"
+"the mouse if this program seems to have halted...\n"
+msgstr ""
+
+#. OpenSSL PRNG state apparently uses 1024 bytes, but it seems pretty sufficient anyway :)
+#: src/tincd.c:210
+#, fuzzy, c-format
+msgid "Generating %d bits keys:\n"
+msgstr "Generando claves de %d bits."
+
+#: src/tincd.c:214
+msgid "Error during key generation!"
+msgstr ""
+
+#: src/tincd.c:218
+#, fuzzy
+msgid "Done.\n"
+msgstr ": hecho.\n"
 
-#: src/tincd.c:158
+#: src/tincd.c:220
+msgid ""
+"Please copy the private key to tinc.conf and the\n"
+"public key to your host configuration file:\n"
+"\n"
+msgstr ""
+
+#: src/tincd.c:230
 #, fuzzy, c-format
 msgid "Memory exhausted (last is %s:%d) (couldn't allocate %d bytes), exiting."
 msgstr ""
 "Memoria agotada (la última es %s:%d) (no pude asignar %d bytes); terminando."
 
-#: src/tincd.c:213
+#: src/tincd.c:285
 #, fuzzy, c-format
 msgid "tincd %s (%s %s) starting, debug level %d"
 msgstr "tincd %s (%s %s) comenzando, nivel de depuración %d."
 
-#: src/tincd.c:216
+#: src/tincd.c:288
 #, fuzzy, c-format
 msgid "tincd %s starting"
 msgstr "tincd %s comenzando, nivel de depuración %d."
 
-#: src/tincd.c:231
+#: src/tincd.c:303
 #, fuzzy, c-format
 msgid "Total bytes written: tap %d, socket %d; bytes read: tap %d, socket %d"
 msgstr ""
 "Total de bytes escritos: tap %d, socket %d; bytes leidos: tap %d, socket %d."
 
-#: src/tincd.c:249
+#: src/tincd.c:321
 #, c-format
 msgid "A tincd is already running for net `%s' with pid %d.\n"
 msgstr ""
 "Un tincd está actualmente en ejecución para la red `%s' con el pid %d.\n"
 
-#: src/tincd.c:252
+#: src/tincd.c:324
 #, c-format
 msgid "A tincd is already running with pid %d.\n"
 msgstr "Un tincd está actualmente en ejecución con el pid %d.\n"
 
-#: src/tincd.c:273
+#: src/tincd.c:345
 #, c-format
 msgid "No other tincd is running for net `%s'.\n"
 msgstr "No hay ningún otro tincd en ejecución para la red `%s'.\n"
 
-#: src/tincd.c:275
+#: src/tincd.c:347
 msgid "No other tincd is running.\n"
 msgstr "No hay ningún otro tincd en ejecución.\n"
 
-#: src/tincd.c:282
+#: src/tincd.c:354
 msgid "Removing stale lock file.\n"
 msgstr "Borrando fichero de bloqueo en desuso.\n"
 
 #. Do some intl stuff right now
-#: src/tincd.c:325
+#: src/tincd.c:397
 msgid "unknown"
 msgstr ""
 
-#: src/tincd.c:331
+#: src/tincd.c:403
 #, c-format
 msgid "%s version %s (built %s %s, protocol %d)\n"
 msgstr ""
 
-#: src/tincd.c:332
+#: src/tincd.c:404
 #, fuzzy
 msgid ""
 "Copyright (C) 1998,1999,2000 Ivo Timmermans, Guus Sliepen and others.\n"
@@ -802,66 +831,75 @@ msgstr ""
 "y puede ser redistribuido bajo ciertas condiciones;\n"
 "vea el fichero COPYING para los detalles.\n"
 
-#: src/tincd.c:346
+#: src/tincd.c:418
 #, fuzzy
 msgid "You must be root to run this program. Sorry.\n"
 msgstr ""
 "Usted debe ser el superusuario para ejecutar este programa. Lo siento.\n"
 
-#: src/tincd.c:377
+#: src/tincd.c:452
 msgid "Unrecoverable error"
 msgstr ""
 
-#: src/tincd.c:382
+#: src/tincd.c:457
 #, c-format
 msgid "Restarting in %d seconds!"
 msgstr ""
 
-#: src/tincd.c:387 src/tincd.c:433
+#: src/tincd.c:462 src/tincd.c:508
 msgid "Aieee! Not restarting."
 msgstr ""
 
-#: src/tincd.c:397
+#: src/tincd.c:472
 msgid "Got TERM signal"
 msgstr "Recibí la señal TERM"
 
-#: src/tincd.c:405
+#: src/tincd.c:480
 msgid "Got QUIT signal"
 msgstr "Recibí la señal QUIT"
 
-#: src/tincd.c:412
+#: src/tincd.c:487
 msgid "Got another SEGV signal: not restarting"
 msgstr "Recibí otra señal SEGV: no reinicio"
 
-#: src/tincd.c:419
+#: src/tincd.c:494
 #, fuzzy
 msgid "Got SEGV signal"
 msgstr "Recibí la señal TERM"
 
-#: src/tincd.c:424
+#: src/tincd.c:499
 #, fuzzy
 msgid "Trying to re-execute in 5 seconds..."
 msgstr "Intento re-establecer la conexión saliente en 5 segundos."
 
-#: src/tincd.c:442
+#: src/tincd.c:517
 msgid "Got HUP signal, rereading configuration and restarting"
 msgstr ""
 
-#: src/tincd.c:450
+#: src/tincd.c:525
 #, fuzzy
 msgid "Got INT signal, exiting"
 msgstr "Recibí la señal INT"
 
-#: src/tincd.c:464
+#: src/tincd.c:539
 #, fuzzy
 msgid "Got USR2 signal, forcing new key generation"
 msgstr "Forzando generación de una nueva clave"
 
-#: src/tincd.c:473
+#: src/tincd.c:548
 #, fuzzy, c-format
 msgid "Got unexpected signal %d (%s)"
 msgstr "Recibí una señal inesperada (%d)."
 
+#~ msgid "Usage: %s bits\n"
+#~ msgstr "Uso: %s bits\n"
+
+#~ msgid "Illegal number: %s\n"
+#~ msgstr "Número ilegal: %s\n"
+
+#~ msgid "Invalid timeout value `%s'.\n"
+#~ msgstr "Valor de `timeout' no válido `%s'.\n"
+
 #~ msgid "Illegal passphrase in %s; size would be %d"
 #~ msgstr "Frase de paso ilegal en %s; el tamaño debe ser %d"
 
index 44e097f..8282032 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: tinc 1.0pre3\n"
-"POT-Creation-Date: 2000-10-15 02:53+0200\n"
+"POT-Creation-Date: 2000-10-20 18:35+0200\n"
 "PO-Revision-Date: 2000-05-31 20:14+02:00\n"
 "Last-Translator: Guus Sliepen <guus@sliepen.warande.net>\n"
 "Language-Team: Dutch <vertaling@nl.linux.org>\n"
@@ -39,36 +39,6 @@ msgstr ""
 "Ongeldige waarde voor variabele op regel %d  tijdens het lezen van "
 "configuratie bestand %s"
 
-#: src/genauth.c:78
-#, c-format
-msgid "Usage: %s bits\n"
-msgstr "Gebruik: %s bits\n"
-
-#: src/genauth.c:89
-#, c-format
-msgid "Illegal number: %s\n"
-msgstr "Ongeldig nummer: %s\n"
-
-#. Align to bytes for easy mallocing and reading
-#: src/genauth.c:95
-#, c-format
-msgid "Generating %d bits keys:\n"
-msgstr "Bezig met genereren van een %d bits sleutel:\n"
-
-#: src/genauth.c:99
-msgid "Done.\n"
-msgstr "Klaar.\n"
-
-#: src/genauth.c:101
-#, c-format
-msgid "Public key:  %s\n"
-msgstr "Publieke sleutel: %s\n"
-
-#: src/genauth.c:102
-#, c-format
-msgid "Private key: %s\n"
-msgstr "Privé sleutel:    %s\n"
-
 #: src/meta.c:42
 #, c-format
 msgid "Sending %d bytes of metadata to %s (%s): %s"
@@ -79,7 +49,7 @@ msgstr "Verzending %d bytes metadata naar %s (%s): %s"
 msgid "Sending meta data to %s (%s) failed: %m"
 msgstr "Fout tijdens verzenden metadata naar %s (%s): %m"
 
-#: src/meta.c:85 src/net.c:773
+#: src/meta.c:85 src/net.c:847
 #, c-format
 msgid "This is a bug: %s:%d: %d:%m %s (%s)"
 msgstr "Dit is een programmeerfout: %s:%d: %d:%m %s (%s)"
@@ -109,274 +79,296 @@ msgstr "Kreeg verzoek van %s (%s): %s"
 msgid "Metadata read buffer overflow for %s (%s)"
 msgstr "Metadata leesbuffer overvol voor %s (%s)"
 
-#: src/net.c:106
+#: src/net.c:107
 #, c-format
 msgid "Sending packet of %d bytes to %s (%s)"
 msgstr "Verzending pakket van %d bytes naar %s (%s)"
 
-#: src/net.c:115
+#: src/net.c:116
 #, c-format
 msgid "Error sending packet to %s (%s): %m"
 msgstr "Fout tijdens verzenden pakket naar %s (%s): %m"
 
-#: src/net.c:129
+#: src/net.c:130
 #, c-format
 msgid "Receiving packet of %d bytes"
 msgstr "Ontvangst pakket van %d bytes"
 
-#: src/net.c:142
+#: src/net.c:143
 #, c-format
 msgid "Can't write to tap device: %m"
 msgstr "Kan niet naar tap apparaat schrijven: %m"
 
-#: src/net.c:242
+#: src/net.c:243
 msgid "Queue flushed"
 msgstr "Wachtrij leeggemaakt"
 
-#: src/net.c:257
+#: src/net.c:258
 #, c-format
 msgid "Flushing send queue for %s (%s)"
 msgstr "Legen van verzend-wachtrij voor %s (%s)"
 
-#: src/net.c:265
+#: src/net.c:266
 #, c-format
 msgid "Flushing receive queue for %s (%s)"
 msgstr "Legen van de ontvangst-wachtrij voor %s (%s)"
 
-#: src/net.c:283
+#: src/net.c:284
 #, c-format
 msgid "Trying to look up %d.%d.%d.%d in connection list failed!"
 msgstr "Poging tot opzoeken %d.%d.%d.%d in verbindingslijst mislukte!"
 
-#: src/net.c:297
+#: src/net.c:298
 #, c-format
 msgid "Could not open UDP connection to %s (%s)"
 msgstr "Kon geen UDP verbinding openen naar %s (%s)"
 
-#: src/net.c:305
+#: src/net.c:306
 #, c-format
 msgid "No valid key known yet for %s (%s), queueing packet"
 msgstr ""
 "Nog geen geldige sleutel bekend voor %s (%s), pakket wordt in de wachtrij "
 "gezet"
 
-#: src/net.c:316
+#: src/net.c:317
 #, c-format
 msgid "%s (%s) is not ready, queueing packet"
 msgstr "%s (%s) is niet gereed, pakket wordt in de wachtrij gezet"
 
-#: src/net.c:344
+#: src/net.c:352
 #, c-format
 msgid "Could not open %s: %m"
 msgstr "Kon %s niet openen: %m"
 
-#: src/net.c:360
+#: src/net.c:370
 #, c-format
 msgid "%s is a new style tun/tap device"
 msgstr "%s is een nieuwe stijl tun/tap apparaat"
 
-#: src/net.c:362
+#: src/net.c:373
 msgid "tun/tap device will be left unconfigured"
 msgstr "tun/tap apparaat wordt ongeconfigureerd gelaten"
 
-#: src/net.c:384
+#: src/net.c:396
 #, c-format
 msgid "Creating metasocket failed: %m"
 msgstr "Aanmaak van metasocket mislukt: %m"
 
-#: src/net.c:390 src/net.c:396 src/net.c:458
+#: src/net.c:402 src/net.c:408 src/net.c:470
 #, c-format
 msgid "setsockopt: %m"
 msgstr "setsockopt: %m"
 
-#: src/net.c:403 src/net.c:465
+#: src/net.c:415 src/net.c:477
 #, c-format
 msgid "fcntl: %m"
 msgstr "fcntl: %m"
 
-#: src/net.c:411
+#: src/net.c:423
 #, c-format
 msgid "Unable to bind listen socket to interface %s: %m"
 msgstr "Kon luistersocket niet binden aan interface %s: %m"
 
-#: src/net.c:427
+#: src/net.c:439
 #, c-format
 msgid "Can't bind to port %hd/tcp: %m"
 msgstr "Kan niet aan poort %hd/tcp binden: %m"
 
-#: src/net.c:433
+#: src/net.c:445
 #, c-format
 msgid "listen: %m"
 msgstr "listen: %m"
 
-#: src/net.c:452
+#: src/net.c:464
 #, c-format
 msgid "Creating socket failed: %m"
 msgstr "Aanmaak socket mislukte: %m"
 
-#: src/net.c:476
+#: src/net.c:488
 #, c-format
 msgid "Can't bind to port %hd/udp: %m"
 msgstr "Kan niet aan poort %hd/udp binden: %m"
 
-#: src/net.c:493
+#: src/net.c:505
 #, c-format
 msgid "Trying to connect to %s"
 msgstr "Poging tot verbinding met %s"
 
-#: src/net.c:503
+#: src/net.c:515
 #, c-format
 msgid "Creating socket for %s port %d failed: %m"
 msgstr "Aanmaken socket voor %s poort %d mislukt: %m"
 
-#: src/net.c:514
+#: src/net.c:526
 #, c-format
 msgid "%s port %hd: %m"
 msgstr "%s poort %hd: %m"
 
-#: src/net.c:521
+#: src/net.c:533
 #, c-format
 msgid "fcntl for %s port %d: %m"
 msgstr "fcntl voor %s poort %d: %m"
 
-#: src/net.c:527
+#: src/net.c:539
 #, c-format
 msgid "Connected to %s port %hd"
 msgstr "Verbonden met %s poort %hd"
 
-#: src/net.c:547
+#: src/net.c:562
+msgid "Invalid name for outgoing connection"
+msgstr "Ongelige naam voor uitgaande verbinding"
+
+#: src/net.c:571
+#, c-format
+msgid "Error reading host configuration file for %s"
+msgstr "Fout tijdens lezen host configuratie bestand voor %s"
+
+#: src/net.c:578
+#, c-format
+msgid "No address specified for %s"
+msgstr "Geen adres gespecificeerd voor %s"
+
+#: src/net.c:585
 #, c-format
 msgid "Error looking up `%s': %m"
 msgstr "Fout bij het opzoeken van `%s': %m"
 
-#: src/net.c:557
+#: src/net.c:595
 #, c-format
 msgid "Could not set up a meta connection to %s"
 msgstr "Kon geen metaverbinding aangaan met %s"
 
-#: src/net.c:586
+#: src/net.c:629
 msgid "Name for tinc daemon required!"
 msgstr "Naam voor tinc daemon verplicht!"
 
-#: src/net.c:594
+#: src/net.c:637
 msgid "Invalid name for myself!"
 msgstr "Ongelige naam voor mijzelf!"
 
-#: src/net.c:600
+#: src/net.c:643
+msgid "Private key for tinc daemon required!"
+msgstr "Privé sleutel voor tinc daemon verplicht!"
+
+#: src/net.c:655
 msgid "Cannot open host configuration file for myself!"
 msgstr "Kan host configuratie bestand voor mijzelf niet openen!"
 
-#: src/net.c:619
+#: src/net.c:661
+msgid "Public key for tinc daemon required!"
+msgstr "Publieke sleutel voor tinc daemon verplicht!"
+
+#: src/net.c:690
 msgid "Unable to set up a listening socket!"
 msgstr "Kon geen luistersocket aanmaken!"
 
-#: src/net.c:625
+#: src/net.c:696
 msgid "Unable to set up an incoming vpn data socket!"
 msgstr "Kon geen socket maken voor inkomend vpn verkeer!"
 
-#: src/net.c:632
+#: src/net.c:703
 #, c-format
 msgid "Ready: listening on port %hd"
 msgstr "Gereed: luisterend op poort %hd"
 
-#: src/net.c:660
+#: src/net.c:734
 #, c-format
 msgid "Still failed to connect to other, will retry in %d seconds"
 msgstr "Wederom niet verbonden met de ander, nieuwe poging over %d seconden"
 
-#: src/net.c:698
+#: src/net.c:772
 #, c-format
 msgid "Trying to re-establish outgoing connection in %d seconds"
 msgstr "Poging tot herstellen van uitgaande verbinding over %d seconden"
 
-#: src/net.c:736
+#: src/net.c:810
 msgid "Terminating"
 msgstr "Beëindigen"
 
-#: src/net.c:750
+#: src/net.c:824
 #, c-format
 msgid "Opening UDP socket to %s"
 msgstr "Bezig met openen UDP socket naar %s"
 
-#: src/net.c:755
+#: src/net.c:829
 #, c-format
 msgid "Creating UDP socket failed: %m"
 msgstr "Aanmaak UDP socket mislukte: %m"
 
-#: src/net.c:765
+#: src/net.c:839
 #, c-format
 msgid "Connecting to %s port %d failed: %m"
 msgstr "Verbinding naar %s poort %d mislukt: %m"
 
-#: src/net.c:798
+#: src/net.c:872
 #, c-format
 msgid "Error: getpeername: %m"
 msgstr "Fout: getpeername: %m"
 
-#: src/net.c:813
+#: src/net.c:887
 #, c-format
 msgid "Connection from %s port %d"
 msgstr "Verbinding van %s poort %d"
 
-#: src/net.c:861
+#: src/net.c:931
 #, c-format
 msgid "This is a bug: %s:%d: %d:%m"
 msgstr "Dit is een programmeerfout: %s:%d: %d:%m"
 
-#: src/net.c:867
+#: src/net.c:937
 #, c-format
 msgid "Incoming data socket error: %s"
 msgstr "Fout op socket voor inkomend verkeer: %s"
 
-#: src/net.c:873
+#: src/net.c:943
 #, c-format
 msgid "Receiving packet failed: %m"
 msgstr "Ontvangst pakket mislukt: %m"
 
-#: src/net.c:894
+#: src/net.c:964
 #, c-format
 msgid "Closing connection with %s (%s)"
 msgstr "Beëindigen verbinding met %s (%s)"
 
-#: src/net.c:937
+#: src/net.c:1007
 msgid "Trying to re-establish outgoing connection in 5 seconds"
 msgstr "Poging tot herstellen van uitgaande verbinding over 5 seconden"
 
-#: src/net.c:967
+#: src/net.c:1037
 #, c-format
 msgid "%s (%s) didn't respond to PING"
 msgstr "%s (%s) antwoordde niet op ping"
 
-#: src/net.c:998
+#: src/net.c:1068
 #, c-format
 msgid "Accepting a new connection failed: %m"
 msgstr "Aanname van nieuwe verbinding is mislukt: %m"
 
-#: src/net.c:1006
+#: src/net.c:1076
 msgid "Closed attempted connection"
 msgstr "Aangenomen verbinding verbroken"
 
-#: src/net.c:1041
+#: src/net.c:1111
 #, c-format
 msgid "Outgoing data socket error for %s (%s): %s"
 msgstr "Fout op socket voor uitgaand verkeer voor %s (%s): %s"
 
-#: src/net.c:1077
+#: src/net.c:1150 src/net.c:1159
 #, c-format
 msgid "Error while reading from tapdevice: %m"
 msgstr "Fout tijdens lezen van tap-apparaatbestand tijdens lezen: %m"
 
-#: src/net.c:1087
+#: src/net.c:1171
 #, c-format
 msgid "Non-IP ethernet frame %04x from %02x:%02x:%02x:%02x:%02x:%02x"
 msgstr "Niet-IP ethernet pakket %04x van %02x:%02x:%02x:%02x:%02x:%02x"
 
-#: src/net.c:1094
+#: src/net.c:1178
 #, c-format
 msgid "Dropping short packet from %02x:%02x:%02x:%02x:%02x:%02x"
 msgstr "Te kort pakket van %02x:%02x:%02x:%02x:%02x:%02x genegeerd"
 
-#: src/net.c:1133
+#: src/net.c:1213
 #, c-format
 msgid "Error while waiting for input: %m"
 msgstr "Fout tijdens wachten op invoer: %m"
@@ -416,148 +408,158 @@ msgstr "Fout tijdens afhandelen %s van %s (%s)"
 msgid "Bogus data received from %s (%s)"
 msgstr "Onzinnige data ontvangen van %s (%s)"
 
-#: src/protocol.c:167
+#: src/protocol.c:170
 #, c-format
 msgid "Got bad ID from %s"
 msgstr "Kreeg ongeldige ID van %s"
 
-#: src/protocol.c:175
+#: src/protocol.c:178
 #, c-format
 msgid "Peer %s (%s) uses incompatible version %d"
 msgstr "Ander %s (%s) gebruikt een niet-compatibel protocol versie %d"
 
-#: src/protocol.c:184
+#: src/protocol.c:187
 #, c-format
 msgid "Peer %s uses invalid identity name"
 msgstr "Ander %s gebruikt een ongeldige identiteitsnaam"
 
-#: src/protocol.c:192
+#: src/protocol.c:195
 #, c-format
 msgid "Peer %s had unknown identity (%s)"
 msgstr "Ander %s heeft een onbekende identiteit (%s)"
 
-#: src/protocol.c:207
+#: src/protocol.c:209
 #, c-format
 msgid "Uplink %s (%s) is already in our connection list"
 msgstr "%s (%s) staat al in onze verbindingslijst"
 
-#: src/protocol.c:253
+#: src/protocol.c:219
+#, c-format
+msgid "No public key known for %s (%s)"
+msgstr "Geen publieke sleutel bekend voor %s (%s)"
+
+#: src/protocol.c:258 src/protocol.c:312
+#, c-format
+msgid "Error during encryption of challenge for %s (%s)"
+msgstr "Fout tijdens versleuteling van uitdaging voor %s (%s)"
+
+#: src/protocol.c:284
 #, c-format
 msgid "Got bad CHALLENGE from %s (%s)"
 msgstr "Kreeg ongeldige CHALLENGE van %s (%s)"
 
-#: src/protocol.c:261
+#: src/protocol.c:294
 #, c-format
 msgid "Intruder: wrong challenge length from %s (%s)"
 msgstr "Indringer: verkeerde lengte voor uitdaging van %s (%s)"
 
-#: src/protocol.c:287
+#: src/protocol.c:330
 #, c-format
 msgid "Trying to send CHAL_REPLY to %s (%s) without a valid CHALLENGE"
 msgstr "Poging tot zenden CHAL_REPLY naar %s (%s) zonder een geldige CHALLENGE"
 
-#: src/protocol.c:318
+#: src/protocol.c:361
 #, c-format
 msgid "Got bad CHAL_REPLY from %s (%s)"
 msgstr "Kreeg ongeldige CHAL_REPLY van %s (%s)"
 
-#: src/protocol.c:327
+#: src/protocol.c:370
 #, c-format
 msgid "Intruder: wrong challenge reply length from %s (%s)"
 msgstr "Indringer: verkeerde lengte van antwoord op uitdaging van %s (%s)"
 
-#: src/protocol.c:344
+#: src/protocol.c:387
 #, c-format
 msgid "Intruder: wrong challenge reply from %s (%s)"
 msgstr "Indringer: verkeerd antwoord op de uitdaging van %s (%s)"
 
-#: src/protocol.c:386
+#: src/protocol.c:425
 #, c-format
 msgid "Removing old entry for %s at %s in favour of new connection from %s"
 msgstr ""
 "Verwijdering oude verbinding voor %s op %s in voordeel van nieuwe verbinding "
 "van %s"
 
-#: src/protocol.c:398
+#: src/protocol.c:437
 #, c-format
 msgid "Connection with %s (%s) activated"
 msgstr "Verbinding met %s (%s) geactiveerd"
 
-#: src/protocol.c:438
+#: src/protocol.c:477
 #, c-format
 msgid "Got bad ADD_SUBNET from %s (%s)"
 msgstr "Kreeg ongeldige ADD_SUBNET van %s (%s)"
 
-#: src/protocol.c:447
+#: src/protocol.c:486
 #, c-format
 msgid "Got bad ADD_SUBNET from %s (%s): invalid identity name"
 msgstr "Kreeg ongeldige ADD_SUBNET van %s (%s): ongeldige identiteitsnaam"
 
-#: src/protocol.c:456
+#: src/protocol.c:495
 #, c-format
 msgid "Got bad ADD_SUBNET from %s (%s): invalid subnet string"
 msgstr "Kreeg ongeldige ADD_SUBNET van %s (%s): ongeldig subnet"
 
-#: src/protocol.c:467
+#: src/protocol.c:506
 #, c-format
 msgid "Warning: got ADD_SUBNET from %s (%s) for ourself, restarting"
 msgstr "Waarschuwing: kreeg ADD_SUBNET van %s (%s) voor onszelf, herstart"
 
-#: src/protocol.c:478
+#: src/protocol.c:517
 #, c-format
 msgid "Got ADD_SUBNET for %s from %s (%s) which is not in our connection list"
 msgstr ""
 "Kreeg DEL_SUBNET voor %d.%d.%d.%d van %s (%s) die niet voorkomt in onze "
 "verbindingslijst"
 
-#: src/protocol.c:506
+#: src/protocol.c:545
 #, c-format
 msgid "Got bad DEL_SUBNET from %s (%s)"
 msgstr "Kreeg ongeldige DEL_SUBNET van %s (%s)"
 
-#: src/protocol.c:515
+#: src/protocol.c:554
 #, c-format
 msgid "Got bad DEL_SUBNET from %s (%s): invalid identity name"
 msgstr "Kreeg ongeldige DEL_SUBNET van %s (%s): ongeldige identiteitsnaam"
 
-#: src/protocol.c:524
+#: src/protocol.c:563
 #, c-format
 msgid "Got bad DEL_SUBNET from %s (%s): invalid subnet string"
 msgstr "Kreeg ongeldige DEL_SUBNET van %s (%s): ongeldige identiteitsnaam"
 
-#: src/protocol.c:535
+#: src/protocol.c:574
 #, c-format
 msgid "Warning: got DEL_SUBNET from %s (%s) for ourself, restarting"
 msgstr "Waarschuwing: kreeg DEL_SUBNET van %s (%s) voor onszelf, herstart"
 
-#: src/protocol.c:546
+#: src/protocol.c:585
 #, c-format
 msgid "Got DEL_SUBNET for %s from %s (%s) which is not in our connection list"
 msgstr ""
 "Kreeg DEL_SUBNET voor %d.%d.%d.%d van %s (%s) die niet voorkomt in onze "
 "verbindingslijst"
 
-#: src/protocol.c:577
+#: src/protocol.c:616
 #, c-format
 msgid "Got bad ADD_HOST from %s (%s)"
 msgstr "Kreeg ongeldige ADD_HOST van %s (%s)"
 
-#: src/protocol.c:585
+#: src/protocol.c:624
 #, c-format
 msgid "Got bad ADD_HOST from %s (%s): invalid identity name"
 msgstr "Kreeg ongeldige ADD_HOST van %s (%s): ongeldige identiteitsnaam"
 
-#: src/protocol.c:594
+#: src/protocol.c:633
 #, c-format
 msgid "Warning: got ADD_HOST from %s (%s) for ourself, restarting"
 msgstr "Waarschuwing: kreeg ADD_HOST van %s (%s) voor onszelf, herstart"
 
-#: src/protocol.c:604
+#: src/protocol.c:643
 #, c-format
 msgid "Warning: got ADD_HOST from %s (%s) from ourself, restarting"
 msgstr "Waarschuwing: kreeg ADD_HOST van %s (%s) van onszelf, herstart"
 
-#: src/protocol.c:614
+#: src/protocol.c:653
 #, c-format
 msgid ""
 "Got ADD_HOST from %s (%s) with origin %s which is not in our connection list"
@@ -565,37 +567,37 @@ msgstr ""
 "Kreeg ADD_HOST van %s (%s) met herkomst %s die niet in onze verbindingslijst "
 "voorkomt"
 
-#: src/protocol.c:633
+#: src/protocol.c:672
 #, c-format
 msgid "Got duplicate ADD_HOST for %s (%s) from %s (%s)"
 msgstr "Kreeg een tweede ADD_HOST voor %s (%s) van %s (%s)"
 
-#: src/protocol.c:640
+#: src/protocol.c:679
 #, c-format
 msgid "Removing old entry for %s (%s)"
 msgstr "Verwijdering oude verbinding voor %s (%s)"
 
-#: src/protocol.c:683
+#: src/protocol.c:722
 #, c-format
 msgid "Got bad DEL_HOST from %s (%s)"
 msgstr "Kreeg ongeldige DEL_HOST van %s (%s)"
 
-#: src/protocol.c:692
+#: src/protocol.c:731
 #, c-format
 msgid "Got bad DEL_HOST from %s (%s): invalid identity name"
 msgstr "Kreeg ongeldige DEL_HOST van %s (%s): ongeldige identiteitsnaam"
 
-#: src/protocol.c:701
+#: src/protocol.c:740
 #, c-format
 msgid "Warning: got DEL_HOST from %s (%s) for ourself, restarting"
 msgstr "Waarschuwing: kreeg DEL_HOST van %s (%s) voor onszelf, herstart"
 
-#: src/protocol.c:712
+#: src/protocol.c:751
 #, c-format
 msgid "Warning: got DEL_HOST from %s (%s) from ourself, restarting"
 msgstr "Waarschuwing: kreeg DEL_HOST van %s (%s) van onszelf, herstart"
 
-#: src/protocol.c:722
+#: src/protocol.c:761
 #, c-format
 msgid ""
 "Got DEL_HOST from %s (%s) with origin %s which is not in our connection list"
@@ -603,43 +605,43 @@ msgstr ""
 "Kreeg DEL_HOST voor %s (%s) met herkomst %s die niet in onze "
 "verbindingslijst voorkomt"
 
-#: src/protocol.c:734
+#: src/protocol.c:773
 #, c-format
 msgid "Got DEL_HOST from %s (%s) for %s which is not in our connection list"
 msgstr ""
 "Kreeg DEL_HOST van %s (%s) voor %s die niet in onze verbindingslijst voorkomt"
 
-#: src/protocol.c:744
+#: src/protocol.c:783
 #, c-format
 msgid "Got DEL_HOST from %s (%s) for %s which doesn't match"
 msgstr "Kreeg DEL_HOST van %s (%s) voor %s wat niet overeenkomt"
 
-#: src/protocol.c:776
+#: src/protocol.c:815
 #, c-format
 msgid "Got bad STATUS from %s (%s)"
 msgstr "Kreeg ongeldige STATUS van %s (%s)"
 
-#: src/protocol.c:783
+#: src/protocol.c:822
 #, c-format
 msgid "Status message from %s (%s): %s: %s"
 msgstr "Ontving statusbericht van %s (%s): %s: %s"
 
-#: src/protocol.c:807
+#: src/protocol.c:846
 #, c-format
 msgid "Got bad ERROR from %s (%s)"
 msgstr "Kreeg ongeldige ERROR van %s (%s)"
 
-#: src/protocol.c:814
+#: src/protocol.c:853
 #, c-format
 msgid "Error message from %s (%s): %s: %s"
 msgstr "Ontving foutmelding van %s (%s): %s: %s"
 
-#: src/protocol.c:892
+#: src/protocol.c:931
 #, c-format
 msgid "Got bad KEY_CHANGED from %s (%s)"
 msgstr "Kreeg ongeldige KEY_CHANGED van %s (%s)"
 
-#: src/protocol.c:899
+#: src/protocol.c:938
 #, c-format
 msgid ""
 "Got KEY_CHANGED from %s (%s) origin %s which does not exist in our "
@@ -648,12 +650,12 @@ msgstr ""
 "Kreeg KEY_CHANGED van %s (%s) met herkomst %s die niet in onze "
 "verbindingslijst voorkomt"
 
-#: src/protocol.c:929
+#: src/protocol.c:968
 #, c-format
 msgid "Got bad REQ_KEY from %s (%s)"
 msgstr "Kreeg ongeldige REQ_KEY van %s (%s)"
 
-#: src/protocol.c:936
+#: src/protocol.c:975
 #, c-format
 msgid ""
 "Got REQ_KEY from %s (%s) origin %s which does not exist in our connection "
@@ -662,7 +664,7 @@ msgstr ""
 "Kreeg REQ_KEY van %s (%s) herkomst %s die niet in onze verbindingslijst "
 "voorkomt"
 
-#: src/protocol.c:952
+#: src/protocol.c:991
 #, c-format
 msgid ""
 "Got REQ_KEY from %s (%s) destination %s which does not exist in our "
@@ -670,12 +672,12 @@ msgid ""
 msgstr ""
 "Kreeg REQ_KEY van %s (%s) doel %s die niet in onze verbindingslijst voorkomt"
 
-#: src/protocol.c:980
+#: src/protocol.c:1019
 #, c-format
 msgid "Got bad ANS_KEY from %s (%s)"
 msgstr "Kreeg ongeldige ANS_KEY van %s (%s)"
 
-#: src/protocol.c:987
+#: src/protocol.c:1026
 #, c-format
 msgid ""
 "Got ANS_KEY from %s (%s) origin %s which does not exist in our connection "
@@ -684,12 +686,12 @@ msgstr ""
 "Kreeg ANS_KEY van %s (%s) met herkomst %s die niet in onze verbindingslijst "
 "voorkomt"
 
-#: src/protocol.c:1003
+#: src/protocol.c:1042
 #, c-format
 msgid "Got bad ANS_KEY from %s (%s) origin %s: invalid key"
 msgstr "Kreeg ongeldige ANS_KEY van %s (%s) herkomst %s: ongeldige sleutel"
 
-#: src/protocol.c:1016
+#: src/protocol.c:1055
 #, c-format
 msgid ""
 "Got ANS_KEY from %s (%s) destination %s which does not exist in our "
@@ -697,12 +699,12 @@ msgid ""
 msgstr ""
 "Kreeg ANS_KEY van %s (%s) doel %s die niet in onze verbindingslijst voorkomt"
 
-#: src/tincd.c:94
+#: src/tincd.c:99
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Probeer `%s --help' voor meer informatie.\n"
 
-#: src/tincd.c:97
+#: src/tincd.c:102
 #, c-format
 msgid ""
 "Usage: %s [option]...\n"
@@ -711,100 +713,132 @@ msgstr ""
 "Gebruik: %s [optie]...\n"
 "\n"
 
-#: src/tincd.c:98
+#: src/tincd.c:103
 msgid ""
 "  -c, --config=DIR      Read configuration options from DIR.\n"
 "  -D, --no-detach       Don't fork and detach.\n"
 "  -d                    Increase debug level.\n"
 "  -k, --kill            Attempt to kill a running tincd and exit.\n"
 "  -n, --net=NETNAME     Connect to net NETNAME.\n"
-"  -t, --timeout=TIMEOUT Seconds to wait before giving a timeout.\n"
 msgstr ""
 "  -c, --config=MAP      Lees configuratie uit MAP.\n"
 "  -D, --no-detach       Start geen nieuw proces.\n"
 "  -d                    Verhoog debugniveau.\n"
 "  -k, --kill            Poging tot doden van lopende tincd en beëindig.\n"
 "  -n, --net=NETNAAM     Verbind met net NETNAAM.\n"
-"  -t, --timeout=TIMEOUT Seconden wachten op timeout.\n"
 
-#: src/tincd.c:104
+#: src/tincd.c:108
 msgid ""
+"  -K, --keygen[=BITS]   Generate public/private RSA keypair.\n"
 "      --help            Display this help and exit.\n"
 "      --version         Output version information and exit.\n"
 "\n"
 msgstr ""
+"  -K, --keygen[=BITS]   Genereer publiek/privé RSA sleutelpaar.\n"
 "      --help            Geef deze hulp en beëindig.\n"
 "      --version         Geef versie informatie en beëindig.\n"
 "\n"
 
-#: src/tincd.c:106
+#: src/tincd.c:111
 msgid "Report bugs to tinc@nl.linux.org.\n"
 msgstr ""
 "Meld fouten in het programma aan tinc@nl.linux.org;\n"
 "Meld fouten in de vertaling aan vertaling@nl.linux.org.\n"
 
-#: src/tincd.c:144
+#: src/tincd.c:152
+msgid "Invalid argument! BITS must be a number equal to or greater than 512.\n"
+msgstr ""
+"Ongeldig argument! BITS moet een nummer zijn gelijk aan of groter dan 512.\n"
+
+#: src/tincd.c:207
+msgid ""
+"Seeding the PRNG: please press some keys or move\n"
+"the mouse if this program seems to have halted...\n"
+msgstr ""
+"Initialisatie van PRNG: druk op de toetsen of beweeg\n"
+"de muis als het programma gestopt lijkt te zijn...\n"
+
+#. OpenSSL PRNG state apparently uses 1024 bytes, but it seems pretty sufficient anyway :)
+#: src/tincd.c:210
 #, c-format
-msgid "Invalid timeout value `%s'.\n"
-msgstr "Ongeldige timeout waarde `%s'.\n"
+msgid "Generating %d bits keys:\n"
+msgstr "Bezig met genereren van een %d bits sleutel:\n"
 
-#: src/tincd.c:158
+#: src/tincd.c:214
+msgid "Error during key generation!"
+msgstr "Fout tijdens genereren sleutel!"
+
+#: src/tincd.c:218
+msgid "Done.\n"
+msgstr "Klaar.\n"
+
+#: src/tincd.c:220
+msgid ""
+"Please copy the private key to tinc.conf and the\n"
+"public key to your host configuration file:\n"
+"\n"
+msgstr ""
+"Copiëer de privé sleutel naar tinc.conf en de\n"
+"publieke sleutel naar het host configuratie bestand:\n"
+"\n"
+
+#: src/tincd.c:230
 #, c-format
 msgid "Memory exhausted (last is %s:%d) (couldn't allocate %d bytes), exiting."
 msgstr ""
 "Geheugen is vol (laatste %s:%d) (kon geen %d bytes vrijmaken), beëindigen."
 
-#: src/tincd.c:213
+#: src/tincd.c:285
 #, c-format
 msgid "tincd %s (%s %s) starting, debug level %d"
 msgstr "tincd %s (%s %s) gestart, debugniveau %d"
 
-#: src/tincd.c:216
+#: src/tincd.c:288
 #, c-format
 msgid "tincd %s starting"
 msgstr "tincd %s gestart"
 
-#: src/tincd.c:231
+#: src/tincd.c:303
 #, c-format
 msgid "Total bytes written: tap %d, socket %d; bytes read: tap %d, socket %d"
 msgstr ""
 "Totaal aantal bytes geschreven: tap %d, socket %d; bytes gelezen: top %d, "
 "socket %d."
 
-#: src/tincd.c:249
+#: src/tincd.c:321
 #, c-format
 msgid "A tincd is already running for net `%s' with pid %d.\n"
 msgstr "Een tincd voor net `%s' draait al met procesnummer %d.\n"
 
-#: src/tincd.c:252
+#: src/tincd.c:324
 #, c-format
 msgid "A tincd is already running with pid %d.\n"
 msgstr "Een tincd draait al met procesnummer %d.\n"
 
-#: src/tincd.c:273
+#: src/tincd.c:345
 #, c-format
 msgid "No other tincd is running for net `%s'.\n"
 msgstr "Geen andere tincd gevonden voor net `%s'.\n"
 
-#: src/tincd.c:275
+#: src/tincd.c:347
 msgid "No other tincd is running.\n"
 msgstr "Geen andere tincd gevonden.\n"
 
-#: src/tincd.c:282
+#: src/tincd.c:354
 msgid "Removing stale lock file.\n"
 msgstr "Ongebruikt vergrendelingsbestand verwijderd.\n"
 
 #. Do some intl stuff right now
-#: src/tincd.c:325
+#: src/tincd.c:397
 msgid "unknown"
 msgstr "onbekend"
 
-#: src/tincd.c:331
+#: src/tincd.c:403
 #, c-format
 msgid "%s version %s (built %s %s, protocol %d)\n"
 msgstr "%s versie %s (gemaakt %s %s, protocol %d)\n"
 
-#: src/tincd.c:332
+#: src/tincd.c:404
 msgid ""
 "Copyright (C) 1998,1999,2000 Ivo Timmermans, Guus Sliepen and others.\n"
 "See the AUTHORS file for a complete list.\n"
@@ -821,61 +855,70 @@ msgstr ""
 "en je bent welkom om het te distribueren onder bepaalde voorwaarden;\n"
 "zie het bestand COPYING voor details.\n"
 
-#: src/tincd.c:346
+#: src/tincd.c:418
 msgid "You must be root to run this program. Sorry.\n"
 msgstr ""
 "Je moet systeembeheerder zijn om dit programma te kunnen draaien. Sorry.\n"
 
-#: src/tincd.c:377
+#: src/tincd.c:452
 msgid "Unrecoverable error"
 msgstr "Onherstelbare fout"
 
-#: src/tincd.c:382
+#: src/tincd.c:457
 #, c-format
 msgid "Restarting in %d seconds!"
 msgstr "Herstart in %d seconden!"
 
-#: src/tincd.c:387 src/tincd.c:433
+#: src/tincd.c:462 src/tincd.c:508
 msgid "Aieee! Not restarting."
 msgstr "Waaah! Geen herstart."
 
-#: src/tincd.c:397
+#: src/tincd.c:472
 msgid "Got TERM signal"
 msgstr "Kreeg TERM signaal"
 
-#: src/tincd.c:405
+#: src/tincd.c:480
 msgid "Got QUIT signal"
 msgstr "Kreeg QUIT signaal"
 
-#: src/tincd.c:412
+#: src/tincd.c:487
 msgid "Got another SEGV signal: not restarting"
 msgstr "Kreeg nog een SEGV signaal: niet herstarten"
 
-#: src/tincd.c:419
+#: src/tincd.c:494
 msgid "Got SEGV signal"
 msgstr "Kreeg SEGV signaal"
 
-#: src/tincd.c:424
+#: src/tincd.c:499
 msgid "Trying to re-execute in 5 seconds..."
 msgstr "Poging tot herstaren over 5 seconden..."
 
-#: src/tincd.c:442
+#: src/tincd.c:517
 msgid "Got HUP signal, rereading configuration and restarting"
 msgstr "Kreeg HUP signaal, herlezen configuratie en herstarten"
 
-#: src/tincd.c:450
+#: src/tincd.c:525
 msgid "Got INT signal, exiting"
 msgstr "Kreeg INT signaal, beëindigen"
 
-#: src/tincd.c:464
+#: src/tincd.c:539
 msgid "Got USR2 signal, forcing new key generation"
 msgstr "Kreeg USR2 signaal, nieuwe sleutels geforceerd"
 
-#: src/tincd.c:473
+#: src/tincd.c:548
 #, c-format
 msgid "Got unexpected signal %d (%s)"
 msgstr "Kreeg onverwacht signaal %d (%s)"
 
+#~ msgid "Usage: %s bits\n"
+#~ msgstr "Gebruik: %s bits\n"
+
+#~ msgid "Illegal number: %s\n"
+#~ msgstr "Ongeldig nummer: %s\n"
+
+#~ msgid "Invalid timeout value `%s'.\n"
+#~ msgstr "Ongeldige timeout waarde `%s'.\n"
+
 #~ msgid "Illegal passphrase in %s; size would be %d"
 #~ msgstr "Ongeldig wachtwoord in %s; grootte zou %d zijn"
 
index 9755bae..81e5797 100644 (file)
@@ -1,9 +1,8 @@
 ## Produce this file with automake to get Makefile.in
-# $Id: Makefile.am,v 1.4.4.2 2000/10/11 10:35:15 guus Exp $
+# $Id: Makefile.am,v 1.4.4.3 2000/10/20 16:49:20 guus Exp $
 
-sbin_PROGRAMS = tincd genauth
+sbin_PROGRAMS = tincd
 
-genauth_SOURCES = genauth.c
 tincd_SOURCES = conf.c connlist.c meta.c net.c netutl.c protocol.c subnet.c tincd.c
 
 INCLUDES = -I$(top_builddir) -I$(top_srcdir)/cipher -I$(top_srcdir)/lib -I$(top_srcdir)/intl
diff --git a/src/genauth.c b/src/genauth.c
deleted file mode 100644 (file)
index 78c567d..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-    genauth.c -- generate public/private keypairs
-    Copyright (C) 1998,1999,2000 Ivo Timmermans <zarq@iname.com>
-                            2000 Guus Sliepen <guus@sliepen.warande.net>
-
-    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
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    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, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id: genauth.c,v 1.7.4.4 2000/10/20 15:34:35 guus Exp $
-*/
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <openssl/rsa.h>
-#include <openssl/rand.h>
-
-#include <xalloc.h>
-
-#include "system.h"
-
-#define RSA_PUBLIC_EXPONENT 65535
-
-void indicator(int a, int b, void *p)
-{
-  switch(a)
-  {
-    case 0:
-      fprintf(stderr, ".");
-      break;
-    case 1:
-      fprintf(stderr, "+");
-      break;
-    case 2:
-      fprintf(stderr, "-");
-      break;
-    case 3:
-      switch(b)
-        {
-          case 0:
-            fprintf(stderr, " p\n");      
-            break;
-          case 1:
-            fprintf(stderr, " q\n");
-            break;
-          default:
-            fprintf(stderr, "?");
-         }
-       break;
-    default:
-      fprintf(stderr, "?");
-  }
-}
-
-int main(int argc, char **argv)
-{
-  int bits;
-  RSA *key;
-
-  setlocale (LC_ALL, "");
-  bindtextdomain (PACKAGE, LOCALEDIR);
-  textdomain (PACKAGE);
-
-  if(argc > 2 || (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))))
-    {
-      fprintf(stderr, _("Usage: %s bits\n"), argv[0]);
-      return 1;
-    }
-
-  if(!argv[1])
-    argv[1] = "1024";
-    
-  bits = atol(argv[1]);
-
-  if(bits<32)
-    {
-      fprintf(stderr, _("Illegal number: %s\n"), argv[1]);
-      return 1;
-    }
-    
-  bits = ((bits - 1) | 7) + 1;         /* Align to bytes for easy mallocing and reading */
-
-  fprintf(stderr, _("Seeding the PRNG: please press some keys or move\nthe mouse if this program seems to have halted...\n"));
-
-  RAND_load_file("/dev/random", 1024); /* OpenSSL PRNG state apparently uses 1024 bytes */
-
-  fprintf(stderr, _("Generating %d bits keys:\n"), bits);
-
-  key = RSA_generate_key(bits, RSA_PUBLIC_EXPONENT, indicator, NULL);
-
-  fprintf(stderr, _("Done.\n"));
-
-  printf(_("Public key:  %s\n"), BN_bn2hex(key->n));
-  printf(_("Private key: %s\n"), BN_bn2hex(key->d));
-  printf(_("Public exp:  %s\n"), BN_bn2hex(key->e));
-
-  fflush(stdin);       /* Flush any input caused by random keypresses */
-
-  return 0;
-}
index 0536d96..f007252 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: tincd.c,v 1.10.4.12 2000/10/15 00:59:37 guus Exp $
+    $Id: tincd.c,v 1.10.4.13 2000/10/20 16:49:20 guus Exp $
 */
 
 #include "config.h"
@@ -31,6 +31,8 @@
 #include <syslog.h>
 #include <unistd.h>
 #include <signal.h>
+#include <openssl/rand.h>
+#include <openssl/rsa.h>
 
 #ifdef HAVE_SYS_IOCTL_H
 # include <sys/ioctl.h>
@@ -63,6 +65,9 @@ static int kill_tincd = 0;
 /* If zero, don't detach from the terminal. */
 static int do_detach = 1;
 
+/* If nonzero, generate public/private keypair for this host/net. */
+static int generate_keys = 0;
+
 char *identname;                 /* program name for syslog */
 char *pidfilename;               /* pid file location */
 static pid_t ppid;               /* pid of non-detached part */
@@ -80,10 +85,10 @@ static struct option const long_options[] =
 {
   { "kill", no_argument, NULL, 'k' },
   { "net", required_argument, NULL, 'n' },
-  { "timeout", required_argument, NULL, 'p' },
   { "help", no_argument, &show_help, 1 },
   { "version", no_argument, &show_version, 1 },
   { "no-detach", no_argument, &do_detach, 0 },
+  { "keygen", optional_argument, NULL, 'K'},
   { NULL, 0, NULL, 0 }
 };
 
@@ -99,9 +104,9 @@ usage(int status)
               "  -D, --no-detach       Don't fork and detach.\n"
               "  -d                    Increase debug level.\n"
               "  -k, --kill            Attempt to kill a running tincd and exit.\n"
-              "  -n, --net=NETNAME     Connect to net NETNAME.\n"
-              "  -t, --timeout=TIMEOUT Seconds to wait before giving a timeout.\n"));
-      printf(_("      --help            Display this help and exit.\n"
+              "  -n, --net=NETNAME     Connect to net NETNAME.\n"));
+      printf(_("  -K, --keygen[=BITS]   Generate public/private RSA keypair.\n"
+               "      --help            Display this help and exit.\n"
               "      --version         Output version information and exit.\n\n"));
       printf(_("Report bugs to tinc@nl.linux.org.\n"));
     }
@@ -115,7 +120,7 @@ parse_options(int argc, char **argv, char **envp)
   int option_index = 0;
   config_t *p;
 
-  while((r = getopt_long(argc, argv, "c:Ddkn:t:", long_options, &option_index)) != EOF)
+  while((r = getopt_long(argc, argv, "c:Ddkn:K::", long_options, &option_index)) != EOF)
     {
       switch(r)
         {
@@ -138,12 +143,19 @@ parse_options(int argc, char **argv, char **envp)
          netname = xmalloc(strlen(optarg)+1);
          strcpy(netname, optarg);
          break;
-       case 't': /* timeout */
-         if(!(p = add_config_val(&config, TYPE_INT, optarg)))
-           {
-             printf(_("Invalid timeout value `%s'.\n"), optarg);
-             usage(1);
-           }
+       case 'K': /* generate public/private keypair */
+          if(optarg)
+            {
+              generate_keys = atoi(optarg);
+              if(generate_keys < 512)
+                {
+                  fprintf(stderr, _("Invalid argument! BITS must be a number equal to or greater than 512.\n"));
+                  usage(1);
+                }
+              generate_keys &= ~7;     /* Round it to bytes */
+            }
+          else
+            generate_keys = 1024;
          break;
         case '?':
           usage(1);
@@ -153,6 +165,66 @@ parse_options(int argc, char **argv, char **envp)
     }
 }
 
+/* This function prettyprints the key generation process */
+
+void indicator(int a, int b, void *p)
+{
+  switch(a)
+  {
+    case 0:
+      fprintf(stderr, ".");
+      break;
+    case 1:
+      fprintf(stderr, "+");
+      break;
+    case 2:
+      fprintf(stderr, "-");
+      break;
+    case 3:
+      switch(b)
+        {
+          case 0:
+            fprintf(stderr, " p\n");      
+            break;
+          case 1:
+            fprintf(stderr, " q\n");
+            break;
+          default:
+            fprintf(stderr, "?");
+         }
+       break;
+    default:
+      fprintf(stderr, "?");
+  }
+}
+
+/* Generate a public/private RSA keypair, and possibly store it into the configuration file. */
+
+int keygen(int bits)
+{
+  RSA *rsa_key;
+
+  fprintf(stderr, _("Seeding the PRNG: please press some keys or move\nthe mouse if this program seems to have halted...\n"));
+  RAND_load_file("/dev/random", 1024); /* OpenSSL PRNG state apparently uses 1024 bytes, but it seems pretty sufficient anyway :) */
+
+  fprintf(stderr, _("Generating %d bits keys:\n"), bits);
+  rsa_key = RSA_generate_key(bits, 0xFFFF, indicator, NULL);
+  if(!rsa_key)
+    {
+      fprintf(stderr, _("Error during key generation!"));
+      return -1;
+     }
+  else
+    fprintf(stderr, _("Done.\n"));
+
+  fprintf(stderr, _("Please copy the private key to tinc.conf and the\npublic key to your host configuration file:\n\n"));
+  printf("PublicKey = %s\n", BN_bn2hex(rsa_key->n));
+  printf("PrivateKey = %s\n", BN_bn2hex(rsa_key->d));
+  
+  fflush(stdin);
+  return 0;
+}
+
 void memory_full(int size)
 {
   syslog(LOG_ERR, _("Memory exhausted (last is %s:%d) (couldn't allocate %d bytes), exiting."), cp_file, cp_line, size);
@@ -351,6 +423,9 @@ main(int argc, char **argv, char **envp)
 
   make_names();
 
+  if(generate_keys)
+    exit(keygen(generate_keys));
+
   if(kill_tincd)
     exit(kill_other());