Package: ucf Version: 3.0025 Severity: normal Tags: patch As the subject says, ucf fails with error code 20 when VERBOSE is set to 1 in /etc/ucf.conf. Actually it is debconf's /usr/share/debconf/confmodule which fails and subsequently topples ucf. The problem seems to be, that some of the messages in ucf are written to stdout instead of stderr, which confuses confmodule's function _db_cmd when reading _db_internal_line. I believe the same is true when DEBUG is set > 0 in ucf.conf, but I had no time to test it in more detail.
I have been able to reproduce this consistently on Lenny and sid with php5-cli, but I think I also encountered the same issue a couple of months ago with nfs-common. I am pretty sure it affects every package which uses ucf. The last line executed before ucf aborts is the following (found with set -x): RET='20 Unsupported command "egrep" (full line was "egrep [[:space:]]\/etc\/php5\/cli\/php\.ini$ /var/lib/ucf/hashfile") received from confmodule.' I attached a patch, diffed against ucf-3.0025 in sid, which simply redirects the few verbose messages written to stdout to stderr. Actually "git blame" tells me that the lines in question have been in the code since 2004, so I can't help wondering whether it has been broken for the last 6 years, or if something changed in debconf. I have not been able to figure out yet, why this only happens when the variables are set in ucf.conf, but not when the cli switches (--verbose/--debug) are used. But somehow using the switches and using ucf.conf results in different behavior, which I think may be a bug in itself. I hope the bug will be properly reported, this is my first time using reportbug. Thanks for your work on Debian! Kind regards, Aljoscha Lautenbach -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Kernel: Linux 2.6.32-3-686 (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages ucf depends on: ii coreutils 8.4-2 GNU core utilities ii debconf 1.5.30 Debian configuration management sy ucf recommends no packages. ucf suggests no packages. -- debconf information: ucf/changeprompt: keep_current ucf/conflicts_found: ucf/title: * ucf/show_diff: * ucf/changeprompt_threeway: keep_current
--- ucf.orig 2010-04-09 22:43:53.000000000 +0200 +++ ucf.new 2010-04-09 22:43:43.000000000 +0200 @@ -155,8 +155,8 @@ if [ "X$docmd" = "XYES" ]; then set +e if [ "X$VERBOSE" != "X" ]; then - echo "egrep -v [[:space:]]${safe_dest_file}$ $statedir/hashfile" - egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" \ + echo >&2 "egrep -v [[:space:]]${safe_dest_file}$ $statedir/hashfile" + egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 \ || true; fi #echo "egrep -v [[:space:]]${safe_dest_file}$ $statedir/hashfile" @@ -170,7 +170,7 @@ set -e fi fi - test -n "$VERBOSE" && echo "The cache file is $cached_file" + test -n "$VERBOSE" && echo >&2 "The cache file is $cached_file" if [ ! -z "$cached_file" -a -f "$statedir/cache/$cached_file" ]; then $action rm -f "$statedir/cache/$cached_file" fi @@ -197,9 +197,9 @@ if [ "X$docmd" = "XYES" ]; then set +e if [ "X$VERBOSE" != "X" ]; then - echo "(egrep -v \"[[:space:]]${safe_dest_file}$\" \"$statedir/hashfile\";" - egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" || true; - md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" ; + echo >&2 "(egrep -v \"[[:space:]]${safe_dest_file}$\" \"$statedir/hashfile\";" + egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 || true; + md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" >&2; fi egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" > \ "$statedir/hashfile.tmp" || true; @@ -513,8 +513,8 @@ if [ -e "$statedir/hashfile" ]; then if [ "X$VERBOSE" != "X" ]; then echo >&2 "The hash file exists" - echo egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" - egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" || true + echo >&2 egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" + egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 || true fi lastsum=$(egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" | \ awk '{print $1;}' )