Date: Fri, 2 Feb 2001 06:00:03 -0800 (PST) From: Peter Pentchev <roam@orbitel.bg> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/24798: pac dumps core if "af" is not specified in /etc/printcap Message-ID: <200102021400.f12E03s56142@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/24798; it has been noted by GNATS.
From: Peter Pentchev <roam@orbitel.bg>
To: nick@netability.ie
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: bin/24798: pac dumps core if "af" is not specified in /etc/printcap
Date: Fri, 2 Feb 2001 15:57:08 +0200
On Fri, Feb 02, 2001 at 01:37:06PM +0000, nick@netability.ie wrote:
>
> >Number: 24798
> >Category: bin
> >Synopsis: pac dumps core if printer accounting not enabled
> >Responsible: freebsd-bugs
> >Originator: Nick Hilliard
> >Release: FreeBSD 4.2-RELEASE i386
> >Organization:
> Network Ability Ltd.
> >Environment:
>
> /etc/printcap contains:
>
> lp|printer:\
> :sh:\
> :rm=printer:sd=/var/spool/output/jimbo:lf=/var/log/lpd-errs:
>
> >Description:
>
> When pac runs, it assumes that the default or specified printer has
> accounting enabled. If this is not the case, then pp->acct_file on
> line 453 of pac.c will be set to NULL. A couple of lines further
> down, acctfile (=pp->acct_file) is dereferenced, which causes a SEGV.
>
> >How-To-Repeat:
>
> put the entry above into /etc/printcap and then type "pac". A
> segmentation fault will occur.
>
> >Fix:
>
> Here's a patch to fix the problem. As pac only processes one
> printer at a time, it's ok to exit instead of returning an error to
> the calling function.
>
> --- pac.c.orig Fri Feb 2 13:27:19 2001
> +++ pac.c Fri Feb 2 13:19:20 2001
> @@ -450,7 +450,10 @@
> case PCAPERR_TCLOOP:
> fatal(pp, "%s", pcaperr(stat));
> }
> - acctfile = pp->acct_file;
> + if ((acctfile = pp->acct_file) == NULL) {
> + printf("pac: accounting not enabled for %s\n", s);
> + exit(3);
> + }
> if (!pflag && pp->price100)
> price = pp->price100/10000.0;
> sumfile = (char *) calloc(sizeof(char), strlen(acctfile)+5);
Good catch!
This printf + exit could be rewritten in a more BSD-ish style as:
err(3, "accounting not enabled for %s", s);
Since src/usr.sbin/pac.c already includes err.h, nothing more is needed.
Hmm.. is Garance A. Drosehn now our official lpr'n'friends maintainer?
Does he get to tackle this PR? :)
G'luck,
Peter
--
I am jealous of the first word in this sentence.
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?200102021400.f12E03s56142>
