Opened 13 years ago

Closed 13 years ago

#35 closed defect (fixed)

Permissions error when creating temp files

Reported by: kaduk Owned by:
Priority: critical Component: server
Keywords: Cc:

Description

I mentioned briefly on zephyr, but when zsr came back up, jobs submitted from non-cups (or is it non-IPP?) clients were getting stuck in a held state:
root@zygorthian-space-raiders:~# lpstat -l -osipbmp3
sipbmp3-13382 kaduk 3861504 Fri 03 Dec 2010 9:18:00 PM EST

Alerts: job-hold-until-specified
queued for sipbmp3

(jobs submitted using cups clients played uneventfully)

Looking at /tmp/gutenbach.log , we see a bunch of things like:
STDERR FROM SPOOL FILTER
Got @ARGV: $VAR1 = [

'13388',
'kaduk',
'07 Sell Sell Sell.mp3',
'1',
'document-name=07
Sell
Sell
Sell.mp3

job-originating-host-name=SYSTEM-LOW-SIPB.MIT.EDU
job-uuid=urn:uuid:e9613623-8429-345f-618c-a7f31183fe60'

];

Odd number of elements in anonymous hash at /usr/lib/cups/backend/gutenbach line 72.
Error in tempfile() using gutenbachXXXXX: Could not create temp file gutenbacheAbjj: Permission denied at /usr/lib/cups/backend/gutenbach line 85

There is more in /var/log/cups/error_log (.1.gz at the moment), but it is less interesting:
D [03/Dec/2010:21:03:56 -0500] [Job 13381] The following messages were recorded from 09:03:56 PM to 09:03:56 PM
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Job submission timed out.
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Sending job to queue tagged as raw...
D [03/Dec/2010:21:03:56 -0500] [Job 13381] job-sheets=standard
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[0]="sipbmp3"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[1]="13381"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[2]="kaduk"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[3]="07 Sell Sell Sell.mp3"
[...]
D [03/Dec/2010:21:03:56 -0500] [Job 13381] envp[27]="CUPS_FILETYPE=job-sheet"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Started filter /usr/lib/cups/filter/gziptoany (PID 29625)
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Started backend /usr/lib/cups/backend/gutenbach (PID 29626)
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Sending job to queue tagged as raw...
D [03/Dec/2010:21:03:56 -0500] [Job 13381] job-sheets=standard
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[0]="sipbmp3"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[1]="13381"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[2]="kaduk"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[3]="07 Sell Sell Sell.mp3"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] envp[27]="CUPS_FILETYPE=job-sheet"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Started filter /usr/lib/cups/filter/gziptoany (PID 29625)
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Started backend /usr/lib/cups/backend/gutenbach (PID 29626)
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Sending job to queue tagged as raw...
D [03/Dec/2010:21:03:56 -0500] [Job 13381] job-sheets=standard
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[0]="sipbmp3"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[1]="13381"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[2]="kaduk"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] argv[3]="07 Sell Sell Sell.mp3"
[...]
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Started filter /usr/lib/cups/filter/gziptoany (PID 29627)
D [03/Dec/2010:21:03:56 -0500] [Job 13381] PAGE: 1 1
D [03/Dec/2010:21:03:56 -0500] [Job 13381] PAGE: 1 1
D [03/Dec/2010:21:03:56 -0500] [Job 13381] Backend returned status 13 (unknown)
D [03/Dec/2010:21:03:56 -0500] [Job 13381] End of messages
D [03/Dec/2010:21:03:56 -0500] [Job 13381] printer-state=3(idle)
D [03/Dec/2010:21:03:56 -0500] [Job 13381] printer-state-message="/usr/lib/cups/filter/gziptoany failed"
D [03/Dec/2010:21:03:56 -0500] [Job 13381] printer-state-reasons=none
E [03/Dec/2010:21:04:46 -0500] PID 30115 (/usr/lib/cups/filter/gziptoany) crashed on signal 13!

So the gziptoany filter's error is what is shown in the super-verbose lpstat output, which is a bit confusing to users.

Going back to the error in gutenbach.log, it's coming from here:

69 # If we weren't given a filename, we need to read from stdin. Since
70 # mplayer really wants a file, let's write out to a temporary file
71 # first.
72 if (!$arguments{"file"}) {
73 my ($fh, $file) = tempfile("gutenbachXXXXX", UNLINK => 1); # Ask File::Temp for a safe temporary file
74 my $buf;
75 while (read(STDIN, $buf, 1024*1024)) { # Read 1M at a time and put it in the temporary file
76 print $fh $buf;
77 }
78 close($fh);
79 $arguments{"file"} = $file;
80 }

The call to tempfile() on line 73 fails, I presume because it is running as an unprivileged user (lp?) in a PWD (/root ?) that it is not authorized to write to. The workaround that I put in place was to just hardcode the tempfile path to begin in /tmp -- but I'm not very happy with that, not knowing for sure where it was trying to write and as what user.

Change History (1)

comment:1 Changed 13 years ago by quentin

  • Resolution set to fixed
  • Status changed from new to closed

Fixed in 02483baae

Note: See TracTickets for help on using tickets.