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

Bug#228926: /var/lib/dpkg/info/tetex-bin.postinst: line 209: 5576: Permission denied



Matt Zimmerman <mdz@debian.org> schrieb:

> I think the problem is with the expression "$LDAT_$$".  I think what you
> wanted was to concatenate $LDAT, "_" and $$, but this expression is expanded
> as "$LDAT_" (which is empty) concatenated with "$$" (expanded to the PID).
> This would create a file in the cwd, which is probably what caused te
> problem.

Arghh. I have been wondering why it was done this way for months, and
all I did was question my knowledge of shell. It seems it only worked
because for most people, . is writable upon an upgrade, and nobody had
an important file whose name was the process ID of postinst...

> I suggest using tempfile or mktemp from debianutils (which is essential).

I haven't the 2.0.2-6 files available, but I think the attached patch
against 5.1's postinst should work. 

--- tetex-bin-2.0.2/debian/postinst.orig	Thu Jan 22 18:37:25 2004
+++ tetex-bin-2.0.2/debian/postinst	Thu Jan 22 18:36:51 2004
@@ -200,23 +200,24 @@
       (cd ${LDATD} ; ln -s ${LDAT} .)
     fi
       db_get tetex-bin/hyphen || true
+			TMP_LDAT=`tempfile`
       IFS=' ,'
       lang="$RET"
       for l in $lang; do
 	case $l in
 	none) cp -f $DFLT $LDAT ;;
-	british) sed -e "s/%! british  ukhyphen.tex/british  ukhyphen.tex/" $LDAT | sed -e "s/%! =UKenglish/=UKenglish/" > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	french\[=patois\]) sed -e "s/%! french/french/" $LDAT | sed -e "s/%! =patois/=patois/" > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	german\[=austrian-alte_Rechtschreibung\]) sed -e "s/%! german/german/" $LDAT | sed -e "s/%! =austrian/=austrian/" > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	ngerman\[=naustrian-neue_Rechtschreibung\]) sed -e "s/%! ngerman/ngerman/" $LDAT | sed -e "s/%! =naustrian/=naustrian/" > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	norsk\[old\]) sed -e "s/%! norsk	nohyph.tex/norsk	nohyph.tex/" $LDAT > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	norsk\[nohyphb\.tex\]) sed -e "s/%! norsk	nohyphb.tex/norsk	nohyphb.tex/" $LDAT > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	norsk\[nohyphbc\.tex\]) sed -e "s/%! norsk	nohyphbc.tex/norsk	nohyphbc.tex/" $LDAT > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	ukrainian\[ukrhyph\.tex\]) sed -e "s/%! ukrainian	ukrhyph.tex/ukrainian	ukrhyph.tex/" $LDAT > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	ukrainian\[ukrhyph\.t2a\]) sed -e "s/%! ukrainian	ukrhyph.t2a/ukrainian	ukrhyph.t2a/" $LDAT > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	ukrainian\[ukrhyph\.lcy\]) sed -e "s/%! ukrainian	ukrhyph.lcy/ukrainian	ukrhyph.lcy/" $LDAT > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	ukrainian\[ukrhyph\.ot2\]) sed -e "s/%! ukrainian	ukrhyph.ot2/ukrainian	ukrhyph.ot2/" $LDAT > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
-	*) sed -e "s/%! $l/$l/" $LDAT > $LDAT_$$; mv $LDAT_$$ $LDAT ;;
+	british) sed -e "s/%! british  ukhyphen.tex/british  ukhyphen.tex/" $LDAT | sed -e "s/%! =UKenglish/=UKenglish/" > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	french\[=patois\]) sed -e "s/%! french/french/" $LDAT | sed -e "s/%! =patois/=patois/" > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	german\[=austrian-alte_Rechtschreibung\]) sed -e "s/%! german/german/" $LDAT | sed -e "s/%! =austrian/=austrian/" > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	ngerman\[=naustrian-neue_Rechtschreibung\]) sed -e "s/%! ngerman/ngerman/" $LDAT | sed -e "s/%! =naustrian/=naustrian/" > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	norsk\[old\]) sed -e "s/%! norsk	nohyph.tex/norsk	nohyph.tex/" $LDAT > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	norsk\[nohyphb\.tex\]) sed -e "s/%! norsk	nohyphb.tex/norsk	nohyphb.tex/" $LDAT > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	norsk\[nohyphbc\.tex\]) sed -e "s/%! norsk	nohyphbc.tex/norsk	nohyphbc.tex/" $LDAT > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	ukrainian\[ukrhyph\.tex\]) sed -e "s/%! ukrainian	ukrhyph.tex/ukrainian	ukrhyph.tex/" $LDAT > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	ukrainian\[ukrhyph\.t2a\]) sed -e "s/%! ukrainian	ukrhyph.t2a/ukrainian	ukrhyph.t2a/" $LDAT > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	ukrainian\[ukrhyph\.lcy\]) sed -e "s/%! ukrainian	ukrhyph.lcy/ukrainian	ukrhyph.lcy/" $LDAT > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	ukrainian\[ukrhyph\.ot2\]) sed -e "s/%! ukrainian	ukrhyph.ot2/ukrainian	ukrhyph.ot2/" $LDAT > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
+	*) sed -e "s/%! $l/$l/" $LDAT > $TMP_LDAT; mv $TMP_LDAT $LDAT ;;
         esac
       done
 else

I would prefer to write a function "uncomment_once" and "uncomment_twice"
that gets the filenames and patterns, but I fear that doesn't work in
sed (s/$pattern/$newpattern/ gives an "unterminated s command"). perl
would do, I think.

Regards, Frank


-- 
Frank Küster, Biozentrum der Univ. Basel
Abt. Biophysikalische Chemie

Reply to: