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: