X-Git-Url: https://git.distorted.org.uk/~mdw/userv-utils/blobdiff_plain/5f1c67ff94a72191a92c02205b91c321bc96695b..caad5ebbf81ec67dbe4381cf29e1156bcc106184:/ipif/service.c diff --git a/ipif/service.c b/ipif/service.c index 5ed6014..18322d4 100644 --- a/ipif/service.c +++ b/ipif/service.c @@ -15,7 +15,7 @@ * is the address of the point-to-point peer. * /,/,... * List of additional routes to add for this interface. - * May be the empty argument. + * May be the empty argument, or `-' if this is problematic. * * is either * ,/[,] @@ -202,13 +202,13 @@ static unsigned long eat_number(const char **argp, const char *what, char *ep; int endchar; - if (!*argp) { badusage("missing number %s\n",what); } + if (!*argp) { badusage("missing number %s",what); } rv= strtoul(*argp,&ep,0); if ((endchar= *ep)) { - if (!endchars) badusage("junk after number %s\n",what); + if (!endchars) badusage("junk after number %s",what); if (!strchr(endchars,endchar)) badusage("invalid character or delimiter `%c' in or after number, %s:" - " expected %s (or none?)\n", endchar,what,endchars); + " expected %s (or none?)", endchar,what,endchars); *argp= ep+1; } else { *argp= 0; @@ -259,7 +259,7 @@ static void eat_prefixmask(const char **argp, const char *what, len= eat_number(argp,whatbuf, 0,32, endchars,endchar_r); mask= (~0UL << (32-len)); - if (prefix & ~mask) badusage("%s prefix %08lx not fully contained in mask %08lx\n", + if (prefix & ~mask) badusage("%s prefix %08lx not fully contained in mask %08lx", what,prefix,mask); *prefix_r= prefix; if (mask_r) *mask_r= mask; @@ -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; - 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; i0 && ifnbuf[k-1]!=' '; k--); ifname= ifnbuf+k;