On Fri, 14 Oct 2011 10:24:05 +0200, Otto Moerbeek wrote:
> On Wed, Oct 12, 2011 at 05:39:48PM +0200, Pascal Stumpf wrote:
> 
> > On Wed, 12 Oct 2011 17:25:06 +0200, Otto Moerbeek wrote:
> > > On Wed, Oct 12, 2011 at 04:03:57PM +0200, Pascal Stumpf wrote:
> > > 
> > > > I have two printers on the local network (laser and lexmark) and I want
> > > > to use lpd(8) to print on them. It seems to me that lpd is having some
> > > > sort of local problem (it does not even create lock and status files in
> > > > the spool directories, and both lpr and lpq do not see the daemon). But
> > > > some info first:
> > > > 
> > > > lpd is started with -s, manually or with rc.d makes no difference (nor
> > > > removing -s).
> > > 
> > > Check your /var/log/lpd.errs.
> > 
> > Doesn't contain anything but "restarted" messages.
> > 
> > > Also, ktracing lpd with the the -i flag might give a clue to what the
> > > lpd child is doing.
> > 
> > Apparently, it segfaults:
> 
> The problem appears in cgetnext();
> 
> I can see two (probably related) problems there:

Thanks for the analysis. :)
 
> 1. if (toprec && !gottoprec) the goto lookup is done, leading to a
> strcspn with record still being NULL.
> 
> 2. After the toprec = record; statement is executed at the bottom op
> the loop, a free(record) is done. That makes toprec point into the
> wild. If a file is closed and reopened, toprec will be non-NULL (but
> wild) and gottoprec will be 0 (due to cgetclose().

Can we set toprec = NULL if gottoprec = 1 in cgetclose()? I can't test
right now because I'm at the university, but it should fix both
problems.

Cheers,
Pascal

> Cc:ing this to millert@ so he can have a look. I'm not completely
> following the toprec logic, I must say.
> 
> Easiest way for me to trigger was:
> Use malloc option S, have at least one entry in printcap, and run lpc.
> On the lpc command line type status twice.
> 
>       -Otto

--------
Excellent day for putting Slinkies on an escalator.

Reply via email to