chiark / gitweb /
Bugfixes - works now.
[userv-utils.git] / ipif / service.c
index ad55e30c29407341527235865208591233f18d6b..18322d4cc71c4c98218aa7b0e6516cdaf7be7afb 100644 (file)
@@ -15,7 +15,7 @@
  *      <peer-addr> is the address of the point-to-point peer.
  *  <prefix>/<mask>,<prefix>/<mask>,...
  *      List of additional routes to add for this interface.
- *      May be the empty argument.
+ *      May be the empty argument, or `-' if this is problematic.
  *
  * <config> is either
  *    <gid>,<prefix>/<len>[,<junk>]
@@ -276,6 +276,7 @@ static void permit(unsigned long pprefix, unsigned long pmask) {
   int i, any;
   
   assert(!(pprefix & ~pmask));
+  any= 0;
 
   if (!proto) fputs("permits",stdout);
   if (addrnet_isin(localaddr,~0UL, pprefix,pmask)) {
@@ -431,29 +432,32 @@ static void parseargs(int argc, const char *const *argv) {
   addrnet_mustdiffer("local-addr",localaddr,~0UL, "peer-addr",peeraddr,~0UL);
   
   carg= *++argv;
-  for (nexroutes=0;
-       carg && *carg;
-       nexroutes++) {
-    if (nexroutes == MAXEXROUTES)
-      fatal("too many extra routes (only %d allowed)",MAXEXROUTES);
-    sprintf(erwhatbuf,"route#%d",nexroutes);
+  if (strcmp(carg,"-")) {
+    for (nexroutes=0;
+        carg && *carg;
+        nexroutes++) {
+      if (nexroutes == MAXEXROUTES)
+       fatal("too many extra routes (only %d allowed)",MAXEXROUTES);
+      sprintf(erwhatbuf,"route#%d",nexroutes);
     
-    eat_prefixmask(&carg,erwhatbuf, ",",0, &routeaddr,&routemask,0);
-    if (routemask == ~0UL) {
-      addrnet_mustdiffer(erwhatbuf,routeaddr,routemask, "local-addr",localaddr,~0UL);
-      addrnet_mustdiffer(erwhatbuf,routeaddr,routemask, "peer-addr",peeraddr,~0UL);
-    }
-    for (i=0; i<nexroutes; i++) {
-      sprintf(erwhatbuf2,"route#%d",i);
-      addrnet_mustdiffer(erwhatbuf,routeaddr,routemask,
-                        erwhatbuf2,exroutes[i].prefix,exroutes[i].mask);
+      eat_prefixmask(&carg,erwhatbuf, ",",0, &routeaddr,&routemask,0);
+      if (routemask == ~0UL) {
+       addrnet_mustdiffer(erwhatbuf,routeaddr,routemask, "local-addr",localaddr,~0UL);
+       addrnet_mustdiffer(erwhatbuf,routeaddr,routemask, "peer-addr",peeraddr,~0UL);
+      }
+      for (i=0; i<nexroutes; i++) {
+       sprintf(erwhatbuf2,"route#%d",i);
+       addrnet_mustdiffer(erwhatbuf,routeaddr,routemask,
+                          erwhatbuf2,exroutes[i].prefix,exroutes[i].mask);
+      }
+      exroutes[nexroutes].prefix= routeaddr;
+      exroutes[nexroutes].mask= routemask;
+      exroutes[nexroutes].allow= 0;
+      ip2txt(routeaddr,exroutes[nexroutes].prefixtxt);
+      ip2txt(routemask,exroutes[nexroutes].masktxt);
     }
-    exroutes[nexroutes].prefix= routeaddr;
-    exroutes[nexroutes].mask= routemask;
-    exroutes[nexroutes].allow= 0;
-    ip2txt(routeaddr,exroutes[nexroutes].prefixtxt);
-    ip2txt(routemask,exroutes[nexroutes].masktxt);
   }
+
   ip2txt(localaddr,localtxt);
   ip2txt(peeraddr,peertxt);
 }
@@ -676,7 +680,7 @@ static void startslattach(void) {
   }
   setsigmask(&fullset);
   l= strlen(ifnbuf);
-  if (l<0 || ifnbuf[l-1] != '\n') fatal("slattach gave strange output `%s'",ifnbuf);
+  if (l<=0 || ifnbuf[l-1] != '\n') fatal("slattach gave strange output `%s'",ifnbuf);
   ifnbuf[l-1]= 0;
   for (k=l; k>0 && ifnbuf[k-1]!=' '; k--);
   ifname= ifnbuf+k;