Fix ndp(8) -f flag parsing
PR: bin/136661 Reminded by: Vinicius Zavam MFC after: 2 weeks
This commit is contained in:
parent
db4300da10
commit
aa06c87e50
@ -29,7 +29,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd Jan 10, 2013
|
||||
.Dd May 9, 2014
|
||||
.Dt NDP 8
|
||||
.Os
|
||||
.\"
|
||||
@ -136,9 +136,26 @@ seconds.
|
||||
Erase all the NDP entries.
|
||||
.It Fl d
|
||||
Delete specified NDP entry.
|
||||
.It Fl f
|
||||
Parse the file specified by
|
||||
.Ar filename .
|
||||
.It Fl f Ar filename
|
||||
Cause the file
|
||||
.Ar filename
|
||||
to be read and multiple entries to be set in the
|
||||
.Tn NDP
|
||||
table.
|
||||
Entries
|
||||
in the file should be of the form
|
||||
.Pp
|
||||
.Bd -ragged -offset indent -compact
|
||||
.Ar hostname ether_addr
|
||||
.Op Cm temp
|
||||
.Op Cm proxy
|
||||
.Ed
|
||||
.Pp
|
||||
with argument meanings as given above.
|
||||
Leading whitespace and empty lines are ignored.
|
||||
A
|
||||
.Ql #
|
||||
character will mark the rest of the line as a comment.
|
||||
.It Fl H
|
||||
Harmonize consistency between the routing table and the default router
|
||||
list; install the top entry of the list into the kernel routing table.
|
||||
|
@ -97,6 +97,7 @@
|
||||
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <netdb.h>
|
||||
#include <errno.h>
|
||||
#include <nlist.h>
|
||||
@ -126,7 +127,7 @@ char host_buf[NI_MAXHOST]; /* getnameinfo() */
|
||||
char ifix_buf[IFNAMSIZ]; /* if_indextoname() */
|
||||
|
||||
int main(int, char **);
|
||||
int file(char *);
|
||||
static int file(char *);
|
||||
void getsocket(void);
|
||||
int set(int, char **);
|
||||
void get(char *);
|
||||
@ -189,7 +190,8 @@ main(int argc, char **argv)
|
||||
break;
|
||||
case 'd':
|
||||
case 'f':
|
||||
case 'i' :
|
||||
exit(file(optarg) ? 1 : 0);
|
||||
case 'i':
|
||||
if (mode) {
|
||||
usage();
|
||||
/*NOTREACHED*/
|
||||
@ -312,17 +314,15 @@ main(int argc, char **argv)
|
||||
/*
|
||||
* Process a file to set standard ndp entries
|
||||
*/
|
||||
int
|
||||
static int
|
||||
file(char *name)
|
||||
{
|
||||
FILE *fp;
|
||||
int i, retval;
|
||||
char line[100], arg[5][50], *args[5];
|
||||
char line[100], arg[5][50], *args[5], *p;
|
||||
|
||||
if ((fp = fopen(name, "r")) == NULL) {
|
||||
fprintf(stderr, "ndp: cannot open %s\n", name);
|
||||
exit(1);
|
||||
}
|
||||
if ((fp = fopen(name, "r")) == NULL)
|
||||
err(1, "cannot open %s", name);
|
||||
args[0] = &arg[0][0];
|
||||
args[1] = &arg[1][0];
|
||||
args[2] = &arg[2][0];
|
||||
@ -330,10 +330,15 @@ file(char *name)
|
||||
args[4] = &arg[4][0];
|
||||
retval = 0;
|
||||
while (fgets(line, sizeof(line), fp) != NULL) {
|
||||
if ((p = strchr(line, '#')) != NULL)
|
||||
*p = '\0';
|
||||
for (p = line; isblank(*p); p++);
|
||||
if (*p == '\n' || *p == '\0')
|
||||
continue;
|
||||
i = sscanf(line, "%49s %49s %49s %49s %49s",
|
||||
arg[0], arg[1], arg[2], arg[3], arg[4]);
|
||||
if (i < 2) {
|
||||
fprintf(stderr, "ndp: bad line: %s\n", line);
|
||||
warnx("bad line: %s", line);
|
||||
retval = 1;
|
||||
continue;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user