From owner-svn-src-head@FreeBSD.ORG Fri May 9 14:24:03 2014 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 4570086A; Fri, 9 May 2014 14:24:03 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 223D7B63; Fri, 9 May 2014 14:24:03 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.8/8.14.8) with ESMTP id s49EO3m6087035; Fri, 9 May 2014 14:24:03 GMT (envelope-from melifaro@svn.freebsd.org) Received: (from melifaro@localhost) by svn.freebsd.org (8.14.8/8.14.8/Submit) id s49EO2Dc087032; Fri, 9 May 2014 14:24:02 GMT (envelope-from melifaro@svn.freebsd.org) Message-Id: <201405091424.s49EO2Dc087032@svn.freebsd.org> From: "Alexander V. Chernikov" Date: Fri, 9 May 2014 14:24:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r265778 - head/usr.sbin/ndp X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 May 2014 14:24:03 -0000 Author: melifaro Date: Fri May 9 14:24:02 2014 New Revision: 265778 URL: http://svnweb.freebsd.org/changeset/base/265778 Log: Fix ndp(8) -f flag parsing PR: bin/136661 Reminded by: Vinicius Zavam MFC after: 2 weeks Modified: head/usr.sbin/ndp/ndp.8 head/usr.sbin/ndp/ndp.c Modified: head/usr.sbin/ndp/ndp.8 ============================================================================== --- head/usr.sbin/ndp/ndp.8 Fri May 9 14:23:06 2014 (r265777) +++ head/usr.sbin/ndp/ndp.8 Fri May 9 14:24:02 2014 (r265778) @@ -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. Modified: head/usr.sbin/ndp/ndp.c ============================================================================== --- head/usr.sbin/ndp/ndp.c Fri May 9 14:23:06 2014 (r265777) +++ head/usr.sbin/ndp/ndp.c Fri May 9 14:24:02 2014 (r265778) @@ -97,6 +97,7 @@ #include +#include #include #include #include @@ -126,7 +127,7 @@ char host_buf[NI_MAXHOST]; /* getnamein 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; }