server: Add a peer without sending key-exchange packets.
[tripe] / server / admin.c
index ecf222f..73c7107 100644 (file)
@@ -1,7 +1,5 @@
 /* -*-c-*-
  *
- * $Id$
- *
  * Admin interface for configuration
  *
  * (c) 2001 Straylight/Edgeware
@@ -1059,21 +1057,25 @@ static void a_resolve(admin *a, admin_resop *r, const char *tag,
   r->addr = 0;
   r->func = func;
   if (mystrieq(av[i], "inet")) i++;
-  if (ac - i != 2) {
-    a_fail(a, "bad-addr-syntax", "[inet] ADDRESS PORT", A_END);
+  if (ac - i != 1 && ac - i != 2) {
+    a_fail(a, "bad-addr-syntax", "[inet] ADDRESS [PORT]", A_END);
     goto fail;
   }
   r->sa.sin.sin_family = AF_INET;
   r->sasz = sizeof(r->sa.sin);
   r->addr = xstrdup(av[i]);
-  pt = strtoul(av[i + 1], &p, 0);
-  if (*p) {
-    struct servent *s = getservbyname(av[i + 1], "udp");
-    if (!s) {
-      a_fail(a, "unknown-service", "%s", av[i + 1], A_END);
-      goto fail;
+  if (!av[i + i])
+    pt = TRIPE_PORT;
+  else {
+    pt = strtoul(av[i + 1], &p, 0);
+    if (*p) {
+      struct servent *s = getservbyname(av[i + 1], "udp");
+      if (!s) {
+       a_fail(a, "unknown-service", "%s", av[i + 1], A_END);
+       goto fail;
+      }
+      pt = ntohs(s->s_port);
     }
-    pt = ntohs(s->s_port);
   }
   if (pt == 0 || pt >= 65536) {
     a_fail(a, "invalid-port", "%lu", pt, A_END);
@@ -1208,6 +1210,7 @@ static void acmd_add(admin *a, unsigned ac, char *av[])
   add->peer.name = 0;
   add->peer.t_ka = 0;
   add->peer.tops = tun_default;
+  add->peer.kxf = 0;
 
   /* --- Parse options --- */
 
@@ -1227,6 +1230,7 @@ static void acmd_add(admin *a, unsigned ac, char *av[])
       }
     })
     OPTTIME("-keepalive", t, { add->peer.t_ka = t; })
+    OPT("-cork", { add->peer.kxf |= KXF_CORK; })
   });
 
   /* --- Make sure someone's not got there already --- */