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

Bug#248368: txt2pdbdoc: Incorrect handling of 'non-existent' debconf setting



Package: txt2pdbdoc
Version: 1.4.2-3
Severity: normal
Followup-For: Bug #248368

Ben, your analysis is partly correct, but the error is not that
db_get does not exist (it does), but what db_get returns (10) and
that this is not handled properly. /usr/share/debconf/confmodule
actaully synthesises a bunch of do_* functions programattically
(read the cryptic loop closely), including do_get. All that these
functions appear to go is to echo to stdout the command in upper
case, followed by its arguments. This is presumably interpreted
by the debconf host program that is talking to the postinst. In
this case, setting the first line of the postinst to

	#!/bin/sh -x

yields the following:

	+ . /usr/share/debconf/confmodule
	++ '[' '!' '' ']'
	++ exec /usr/share/debconf/frontend /var/lib/dpkg/info/txt2pdbdoc.postinst configure 1.4.2-2
	+ . /usr/share/debconf/confmodule
	++ '[' '!' 1 ']'
	++ '[' -z '' ']'
	++ exec
	++ DEBCONF_REDIR=1
	++ export DEBCONF_REDIR
	++ _old_opts=configure 1.4.2-2

	...

	++ set -- get GET
	++ eval 'db_get () {
	                echo "GET $@" >&3
	                # Set to newline to get whole line.
	                local IFS='\''
	'\''
	                local _LINE
	                read -r _LINE
	                # Disgusting, but it'\''s the only good way to split the line,
	                # preserving all other whitespace.
	                RET="${_LINE#[!         ][      ]}"
	                return ${_LINE%%[       ]*}
	              }'

	...

	++ set -- configure 1.4.2-2
	++ unset _old_opts
	+ db_get txt2pdbdoc/warning-memcard
	+ echo 'GET txt2pdbdoc/warning-memcard'
	+ local 'IFS=
	'
	+ local _LINE
	+ read -r _LINE
	+ RET=10 txt2pdbdoc/warning-memcard doesn't exist
	+ return 10

Note in particular the synthesis of db_get in confmodule and its
subsequent invocation in txt2pdbdoc.postinst.

Maintainer: I don't know debconf well enough to interpret what's
happening here, but my wild guess is that the postinst script is
supposed to deal sensibly with the "return 10", rather than just
let it fall through to the invocation environment. Even if the
"return 10" is the result of some other problem that is not
supposed to be occurring, presumably it is the responsibility of
the postinst to report the error message to the user?

- Raz

-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing')
Architecture: i386 (i686)
Kernel: Linux 2.6.0-1-686
Locale: LANG=C, LC_CTYPE=C

Versions of packages txt2pdbdoc depends on:
ii  debconf                     1.4.25       Debian configuration management sy
ii  libc6                       2.3.2.ds1-12 GNU C Library: Shared libraries an
ii  perl                        5.8.4-1      Larry Wall's Practical Extraction 

-- debconf information:
* txt2pdbdoc/warning-memorycard: 



Reply to: