[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#75199:



  Hugo reported the following bug in apsfilter (v. 5.1):

    3) when printing with lpr -Pauto temporary files in /tmp never seem to be removed.
       The reason is that the trap lines in file
	     /usr/share/apsfilter/bin/apsfilter do not seem to be working.
       The relevant lines are
    #
    # Ignore hangup, keyboard interrupt, quit from keyboard, and broken pipes.
    # Other signals for abort and on exit we should remove our temp file
    #
    trap "echo" SIGHUP SIGINT SIGQUIT SIGPIPE
    trap "rm -f $TMP_PRINTOUT $APS_HEADER $TMP_FILE $TMP_FILE2" \
				     EXIT SIGTRAP SIGBUS SIGKILL \
				     SIGUSR1 SIGUSR2 SIGTERM
       I dont know why this line fails but the second last line in the apsfilter file is
    rm ${APS_HEADER}
       so I suspect failure to delete tmp files is a common problem. The fix I implemented
       here is to add the lines
	    rm -f ${TMP_PRINTOUT}
	    rm -f ${TMP_FILE}
	    rm -f ${TMP_FILE2}
       after the rm ${APS_HEADER} line to explicitly remove all temp files.
       As an added note perhaps the trap is failing on my machine because
       I have my /tmp mounted as a separate partition with the hardened /etc/fstab options
    /dev/hdc6  /tmp    ext2  defaults,errors=remount-ro,rw,nosuid,nodev,noexec 0 1

  Turns out there was a trap in print_ascii_a2ps that was overriding
  the top-level trap. I removed this trap and moved the temporary file
  removal to the top-level trap. With this change, the need to have an
  explicit removal of APS_HEADER (mentioned in the workaround above)
  is no longer necessary.

  Here is the patch:

cd /usr/share/apsfilter/bin/
diff -u /usr/share/apsfilter/bin/apsfilter- /usr/share/apsfilter/bin/apsfilter
--- /usr/share/apsfilter/bin/apsfilter-	Thu Jan 13 08:21:36 2000
+++ /usr/share/apsfilter/bin/apsfilter	Wed Mar  7 15:06:22 2001
@@ -62,13 +62,14 @@
 APS_HEADER=`tempfile` || exit 1
 TMP_FILE=`tempfile` || exit 1
 TMP_FILE2=`tempfile` || exit 1
+LPRNG_CF=`tempfile` || exit 1
 
 #
 # Ignore hangup, keyboard interrupt, quit from keyboard, and broken pipes.
 # Other signals for abort and on exit we should remove our temp file
 #
 trap "echo" SIGHUP SIGINT SIGQUIT SIGPIPE
-trap "rm -f $TMP_PRINTOUT $APS_HEADER $TMP_FILE $TMP_FILE2" \
+trap "rm -f $TMP_PRINTOUT $APS_HEADER $TMP_FILE $TMP_FILE2 $LPRNG_CF" \
 				 EXIT SIGTRAP SIGBUS SIGKILL \
 				 SIGUSR1 SIGUSR2 SIGTERM
 
@@ -465,10 +466,8 @@
 
 	# get job, user and host ...
 	if [ ! -z "$CONTROL" ]; then
-		# for LPRng
-		CF=`tempfile` || exit 1
-		trap "rm -f $CF" 0 1 9 15
-		echo "$CONTROL" > $CF
+		echo "$CONTROL" > $LPRNG_CF
+		CF=$LPRNG_CF
 	else
 		# for Berkeley lpr
 		SPOOL_DIR=`dirname ${ACCTFILE}`
@@ -1253,6 +1252,4 @@
 			esac
 			;;
 	esac
-
-	rm ${APS_HEADER}
 fi

Diff finished at Wed Mar  7 15:06:42

--
Bill Wohler <wohler@newt.com>  http://www.newt.com/wohler/  GnuPG ID:610BD9AD
Maintainer of comp.mail.mh FAQ and mh-e. Vote Libertarian!
If you're passed on the right, you're in the wrong lane.



Reply to: