Date: Mon, 21 Feb 2000 23:27:38 -0500 (EST) From: "Crist J. Clark" <cjc@cc942873-a.ewndsr1.nj.home.com> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/16900: Bad error flagging in natd(8) config file read Message-ID: <200002220427.XAA04355@cc942873-a.ewndsr1.nj.home.com>
next in thread | raw e-mail | index | archive | help
>Number: 16900 >Category: bin >Synopsis: Bad error flagging in natd(8) config file read >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Feb 21 20:30:00 PST 2000 >Closed-Date: >Last-Modified: >Originator: Crist J. Clark >Release: FreeBSD 3.4-STABLE i386 >Organization: >Environment: Present in all versions of FreeBSD checked up to 3.4-STABLE. >Description: natd(8) will choke and die on a configuration file if the last line of the file does not end in a newline. It does not matter whether the line is even a natd option. natd will bail if the last line is a comment and does not end in a newline (which is how I found this). That in itself is not necessarily a bug. What is a bug is that natd improperly flags the error as, natd: config line too long: <last line> >How-To-Repeat: This will occur anytime a natd configuration file is valid until the last line without a newline. >Fix: The workaround is to realize natd is misinterpretting the situation and put a newline in your config file. There are two ways to have natd properly handle this. (1) Flag a file with no newline on the last line, or (2) accept a file with no newline on the last line. Here is the patch for (1), --- /usr/src/sbin/natd/natd.c Fri Jan 28 04:02:05 2000 +++ natd.c Mon Feb 21 23:03:36 2000 @@ -1263,7 +1263,10 @@ ptr = strchr (buf, '\n'); - if (!ptr) - errx (1, "config line too long: %s", buf); + if (!ptr) { + ptr = strchr (buf, '\0'); + if ( ptr && ( ( ptr - buf + 1 ) < sizeof (buf) ) ) + errx (1, "no newline at end of config file: %s", buf); + else + errx (1, "config line too long: %s", buf); + } *ptr = '\0'; However, here is the patch for my preference, (2), --- /usr/src/sbin/natd/natd.c Fri Jan 28 04:02:05 2000 +++ natd.c Mon Feb 21 23:12:32 2000 @@ -1262,8 +1262,11 @@ while (fgets (buf, sizeof (buf), file)) { ptr = strchr (buf, '\n'); - if (!ptr) - errx (1, "config line too long: %s", buf); + if (!ptr) { + ptr = strchr (buf, '\0'); + if ( ptr && ( ( ptr - buf + 1 ) == sizeof (buf) ) ) + errx (1, "config line too long: %s", buf); + } *ptr = '\0'; I tested a little, but they are quick fixes. I may have overlooked something. >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200002220427.XAA04355>