reopen 217605 tag 217605 = patch thanks Hi,
the fix is wrong: * In xdm.config, because of a typo when calling head, CURRENT_DEFAULT is empty, so at end of script $DEFAULT_DISPLAY_MANAGER_FILE is moved to $DEFAULT_DISPLAY_MANAGER_FILE.dpkg-tmp * In xdm.postinst, as $DEFAULT_DISPLAY_MANAGER_FILE does not exist, the debconf stuff is always run. If $DEFAULT_DISPLAY_MANAGER/daemon_name does not exist, DAEMON_NAME contains "10 $DEFAULT_DISPLAY_MANAGER/daemon_name doesn't exist" or something like that. This is because of your safe_debconf function, it is not safe at all ;o) You must instead test db_get return code, which makes safe_debconf pretty useless, so I removed calls to it from both scripts. In -13 postinst no more fails, which is of course better, but display manager is not restarted when $DEFAULT_DISPLAY_MANAGER/daemon_name does not exist. Patch against trunk-debian-2003.11.16 attached. Denis
diff -ur trunk-debian-2003.11.16.orig/debian/xdm.config.in trunk-debian-2003.11.16/debian/xdm.config.in --- trunk-debian-2003.11.16.orig/debian/xdm.config.in 2003-11-16 09:01:07.000000000 +0200 +++ trunk-debian-2003.11.16/debian/xdm.config.in 2003-11-16 09:23:14.000000000 +0200 @@ -19,15 +19,15 @@ # set default display manager DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager -safe_debconf db_metaget shared/default-x-display-manager owners +db_metaget shared/default-x-display-manager owners || true OWNERS="$RET" -safe_debconf db_metaget shared/default-x-display-manager choices +db_metaget shared/default-x-display-manager choices || true CHOICES="$RET" if [ -n "$OWNERS" -a -n "$CHOICES" ]; then if [ "$OWNERS" != "$CHOICES" ]; then - safe_debconf db_subst shared/default-x-display-manager choices "$OWNERS" - safe_debconf db_fset shared/default-x-display-manager seen false + db_subst shared/default-x-display-manager choices "$OWNERS" + db_fset shared/default-x-display-manager seen false fi # debconf is not a registry; use the current contents of the default display @@ -35,27 +35,29 @@ if [ -e "$DEFAULT_DISPLAY_MANAGER_FILE" ]; then CURRENT_DEFAULT=$(basename "$(grep -v '^[[:space:]]*#' \ "$DEFAULT_DISPLAY_MANAGER_FILE" | - head -n -1)") + head -n 1)") if [ -n "$CURRENT_DEFAULT" ]; then if ! which "$CURRENT_DEFAULT" > /dev/null 2>&1; then observe "default display manager \"$CURRENT_DEFAULT\" specified in" \ "$DEFAULT_DISPLAY_MANAGER_FILE does not exist or is not" \ "executable" fi - safe_debconf db_set shared/default-x-display-manager "$CURRENT_DEFAULT" + db_set shared/default-x-display-manager "$CURRENT_DEFAULT" fi else - safe_debconf db_get shared/default-x-display-manager - CURRENT_DEFAULT="$RET" + if db_get shared/default-x-display-manager; then + CURRENT_DEFAULT="$RET" + fi fi - safe_debconf db_input high shared/default-x-display-manager - safe_debconf db_go + db_input high shared/default-x-display-manager || true + db_go || true fi # using this display manager? -safe_debconf db_get shared/default-x-display-manager -NEW_DEFAULT="$RET" +if db_get shared/default-x-display-manager; then + NEW_DEFAULT="$RET" +fi # move the default display manager file if we're going to change it if [ -n "$NEW_DEFAULT" ]; then diff -ur debian.orig/xdm.postinst.in debian/xdm.postinst.in --- debian.orig/xdm.postinst.in 2003-11-16 09:01:19.000000000 +0200 +++ debian/xdm.postinst.in 2003-11-16 09:09:54.000000000 +0200 @@ -9,9 +9,6 @@ set -e -# source debconf library -. /usr/share/debconf/confmodule - THIS_PACKAGE=xdm THIS_SCRIPT=postinst @@ -33,12 +30,16 @@ # does not exist DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager if [ ! -e "$DEFAULT_DISPLAY_MANAGER_FILE" ]; then - safe_debconf db_get shared/default-x-display-manager - DEFAULT_DISPLAY_MANAGER="$RET" + # source debconf library + . /usr/share/debconf/confmodule + + if db_get shared/default-x-display-manager; then + DEFAULT_DISPLAY_MANAGER="$RET" + fi if [ -n "$DEFAULT_DISPLAY_MANAGER" ]; then - safe_debconf db_get "$DEFAULT_DISPLAY_MANAGER"/daemon_name - DAEMON_NAME="$RET" - if [ ! -n "$DAEMON_NAME" ]; then + if db_get "$DEFAULT_DISPLAY_MANAGER"/daemon_name; then + DAEMON_NAME="$RET" + else # if we were unable to determine the name of the selected daemon (for # instance, if the selected default display manager doesn't provide a # daemon_name question), guess @@ -53,6 +54,9 @@ echo "$DAEMON_NAME" > "$DEFAULT_DISPLAY_MANAGER_FILE" fi fi + + # restarting the daemon may cause output to stdout + db_stop fi # remove the displaced old default display manager file if it exists @@ -60,9 +64,6 @@ rm "$DEFAULT_DISPLAY_MANAGER_FILE.dpkg-tmp" fi -# restarting the daemon may cause output to stdout -safe_debconf db_stop - # don't start xdm if we are upgrading without stopping it NOSTART= XDM_RUNNING=