Author: branden Date: 2003-09-10 18:08:13 -0500 (Wed, 10 Sep 2003) New Revision: 506
Modified: trunk/debian/changelog trunk/debian/xdm.config.in trunk/debian/xdm.postinst.in trunk/debian/xdm.postrm.in trunk/debian/xdm.preinst.in trunk/debian/xdm.prerm.in Log: Robustify xdm maintainer scripts. - debian/xdm.{config,preinst,postinst,prerm,postrm}.in: + improve comments + wrap bare db_* commands with safe_debconf() + quote shell variables where reasonable to do so + don't do things that depend on the value of $RET after a db_* if a null value doesn't make sense + wrap long lines at 80 columns - debian/xdm.config.in: + debconf is not a registry; use the basename of the path listed in /etc/X11/default-display-manager as the default answer to the shared/default-x-display-manager question if it is available; otherwise fall back to existing value + uh, let's try defining the DEFAULT_DISPLAY_MANAGER_FILE variable since we dereference it - debian/xdm.postinst.in: + use HOST as our iterator variable when checking $DISPLAY instead of HOSTNAME, which is often already defined + discard error messages from hostname command + stop searching for a $DISPLAY on $HOST:0 once we've found one - debian/xdm.prerm.in: + don't attempt to find any children of the xdm daemon, and don't make any effort to stop it, if pidof doesn't report any xdm processes running Modified: trunk/debian/changelog =================================================================== --- trunk/debian/changelog 2003-09-10 21:56:11 UTC (rev 505) +++ trunk/debian/changelog 2003-09-10 23:08:13 UTC (rev 506) @@ -108,8 +108,33 @@ + patch #000_stolen_from_HEAD: in with the new + patch #095: out with the old (deleted) - -- Branden Robinson <[EMAIL PROTECTED]> Wed, 10 Sep 2003 16:53:26 -0500 + * Robustify xdm maintainer scripts. + - debian/xdm.{config,preinst,postinst,prerm,postrm}.in: + + improve comments + + wrap bare db_* commands with safe_debconf() + + quote shell variables where reasonable to do so + + don't do things that depend on the value of $RET after a db_* if a + null value doesn't make sense + + wrap long lines at 80 columns + - debian/xdm.config.in: + + debconf is not a registry; use the basename of the path listed in + /etc/X11/default-display-manager as the default answer to the + shared/default-x-display-manager question if it is available; + otherwise fall back to existing value + + uh, let's try defining the DEFAULT_DISPLAY_MANAGER_FILE variable since + we dereference it + - debian/xdm.postinst.in: + + use HOST as our iterator variable when checking $DISPLAY instead of + HOSTNAME, which is often already defined + + discard error messages from hostname command + + stop searching for a $DISPLAY on $HOST:0 once we've found one + - debian/xdm.prerm.in: + + don't attempt to find any children of the xdm daemon, and don't make + any effort to stop it, if pidof doesn't report any xdm processes + running + -- Branden Robinson <[EMAIL PROTECTED]> Wed, 10 Sep 2003 17:39:00 -0500 + xfree86 (4.2.1-11) unstable; urgency=medium * urgency set to medium because bug #206790 bites a lot of people (but, Modified: trunk/debian/xdm.config.in =================================================================== --- trunk/debian/xdm.config.in 2003-09-10 21:56:11 UTC (rev 505) +++ trunk/debian/xdm.config.in 2003-09-10 23:08:13 UTC (rev 506) @@ -18,29 +18,41 @@ # set default display manager -db_get shared/default-x-display-manager -OLD_DEFAULT="$RET" +DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager -db_metaget shared/default-x-display-manager owners +safe_debconf db_metaget shared/default-x-display-manager owners OWNERS="$RET" -db_metaget shared/default-x-display-manager choices +safe_debconf db_metaget shared/default-x-display-manager choices CHOICES="$RET" -if [ "$OWNERS" != "$CHOICES" ]; then - db_subst shared/default-x-display-manager choices $OWNERS - db_fset shared/default-x-display-manager seen false +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 + fi + + # debconf is not a registry; use the current contents of the default display + # manager to pre-answer the question if possible + if [ -e "$DEFAULT_DISPLAY_MANAGER_FILE" ]; then + CURRENT_DEFAULT=$(basename $(head -n 1 "$DEFAULT_DISPLAY_MANAGER_FILE")) + else + safe_debconf db_get shared/default-x-display-manager + CURRENT_DEFAULT="$RET" + fi + + safe_debconf db_input high shared/default-x-display-manager + safe_debconf db_go fi -db_input high shared/default-x-display-manager || true -db_go - # using this display manager? -db_get shared/default-x-display-manager -CURRENT_DEFAULT="$RET" +safe_debconf db_get shared/default-x-display-manager +NEW_DEFAULT="$RET" # remove the default display manager file if we're going to change it -if [ "$OLD_DEFAULT" != "$CURRENT_DEFAULT" ]; then - rm -f $DEFAULT_DISPLAY_MANAGER_FILE +if [ -n "$NEW_DEFAULT" ]; then + if [ "$NEW_DEFAULT" != "$CURRENT_DEFAULT" ]; then + rm -f "$DEFAULT_DISPLAY_MANAGER_FILE" + fi fi exit 0 Modified: trunk/debian/xdm.postinst.in =================================================================== --- trunk/debian/xdm.postinst.in 2003-09-10 21:56:11 UTC (rev 505) +++ trunk/debian/xdm.postinst.in 2003-09-10 23:08:13 UTC (rev 506) @@ -36,36 +36,44 @@ fi done -DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager - # debconf is not a registry, so we only fiddle with the default file if it # does not exist -if [ ! -e $DEFAULT_DISPLAY_MANAGER_FILE ]; then - db_get shared/default-x-display-manager - if [ "$THIS_PACKAGE" != "$RET" ]; then - message "Please be sure to run \"dpkg --configure $RET\"." +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 + if [ -n "$RET" ]; then + if [ "$THIS_PACKAGE" != "$RET" ]; then + message "Please be sure to run \"dpkg --configure $RET\"." + fi + safe_debconf db_get "$RET"/daemon_name + if [ -n "$RET" ]; then + echo "$RET" > "$DEFAULT_DISPLAY_MANAGER_FILE" + fi fi - db_get "$RET"/daemon_name - echo "$RET" > $DEFAULT_DISPLAY_MANAGER_FILE fi # restarting the daemon may cause output to stdout -db_stop +safe_debconf db_stop +# don't start xdm if we are upgrading without stopping it NOSTART= XDM_RUNNING= -# don't start xdm if we are upgrading without stopping it if [ -e /var/run/xdm.upgrade ]; then NOSTART=yes fi # or if we're currently in X on the display it attempts to manage by default -for HOSTNAME in "" "localhost" "$(hostname)" "$(hostname -f)"; do - if echo $DISPLAY | grep -q "^$HOSTNAME:0.*"; then +for HOST in "" \ + "localhost" \ + "$(hostname 2> /dev/null)" \ + "$(hostname -f 2> /dev/null)"; do + if echo "$DISPLAY" | grep -q "^$HOST:0.*"; then NOSTART=yes + break fi done # or if it's already running -if start-stop-daemon --stop --quiet --signal 0 --pid /var/run/xdm.pid --exec /usr/bin/X11/xdm; then +if start-stop-daemon --stop --quiet --signal 0 --pid /var/run/xdm.pid \ + --exec /usr/bin/X11/xdm; then NOSTART=yes XDM_RUNNING=yes fi @@ -87,10 +95,10 @@ fi if [ -e /etc/init.d/xdm ]; then - update-rc.d $THIS_PACKAGE defaults 99 01 + update-rc.d "$THIS_PACKAGE" defaults 99 01 fi -[ -n "$NOSTART" ] || invoke-rc.d $THIS_PACKAGE start || true +[ -n "$NOSTART" ] || invoke-rc.d "$THIS_PACKAGE" start || true #DEBHELPER# Modified: trunk/debian/xdm.postrm.in =================================================================== --- trunk/debian/xdm.postrm.in 2003-09-10 21:56:11 UTC (rev 505) +++ trunk/debian/xdm.postrm.in 2003-09-10 23:08:13 UTC (rev 506) @@ -15,7 +15,8 @@ #INCLUDE_SHELL_LIB# if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ]; then - if [ -d /usr/X11R6/lib/X11/xdm.moved-by-preinst -a -L /usr/X11R6/lib/X11/xdm ]; then + if [ -d /usr/X11R6/lib/X11/xdm.moved-by-preinst -a \ + -L /usr/X11R6/lib/X11/xdm ]; then rm /usr/X11R6/lib/X11/xdm mv /usr/X11R6/lib/X11/xdm.moved-by-preinst /usr/X11R6/lib/X11/xdm fi @@ -29,10 +30,10 @@ #DEBHELPER# if [ "$1" = "purge" ]; then - update-rc.d $THIS_PACKAGE remove + update-rc.d "$THIS_PACKAGE" remove for DIR in /etc/X11/xdm /var/lib/xdm; do - if [ -d $DIR ]; then - rm -r $DIR + if [ -d "$DIR" ]; then + rm -r "$DIR" fi done fi Modified: trunk/debian/xdm.preinst.in =================================================================== --- trunk/debian/xdm.preinst.in 2003-09-10 21:56:11 UTC (rev 505) +++ trunk/debian/xdm.preinst.in 2003-09-10 23:08:13 UTC (rev 506) @@ -15,13 +15,16 @@ #INCLUDE_SHELL_LIB# if [ "$1" = "install" -o "$1" = "upgrade" ]; then - # xdm dir moved to /etc/X11 in 4.x + # as of the xfree86 4.x packages, we expect /usr/X11R6/lib/X11/xdm to be a + # symbolic link to the /etc/X11/xdm directory; move an existing directory out + # of the way (even if we're installing over a non-packaged XFree86 + # installation) if [ -e /usr/X11R6/lib/X11/xdm -a ! -L /usr/X11R6/lib/X11/xdm ]; then message "Note: Removing obsolete /usr/X11R6/lib/X11/xdm directory." mv /usr/X11R6/lib/X11/xdm /usr/X11R6/lib/X11/xdm.moved-by-preinst fi - # got rid of the shared libXdmGreeter in 4.0.3 + # got rid of the shared libXdmGreet in 4.0.3 if dpkg --compare-versions "$2" lt "4.0.3-1"; then if update-alternatives --display xdm-greeter | \ fgrep -q /usr/X11R6/lib/libXdmGreet.so.1; then Modified: trunk/debian/xdm.prerm.in =================================================================== --- trunk/debian/xdm.prerm.in 2003-09-10 21:56:11 UTC (rev 505) +++ trunk/debian/xdm.prerm.in 2003-09-10 23:08:13 UTC (rev 506) @@ -32,47 +32,51 @@ esac STOP= -# are we supposed to restart on upgrade? if REMOVING xdm, we don't care -if grep -qs ^restart-on-upgrade /etc/X11/xdm/xdm.options || [ -n "$REMOVING" ]; then +# are we supposed to restart on upgrade? if REMOVING xdm, we don't care what +# the user says, we have to stop the daemon +if grep -qs ^restart-on-upgrade /etc/X11/xdm/xdm.options || \ + [ -n "$REMOVING" ]; then # is there an xdm process running? if start-stop-daemon --stop --quiet --signal 0 --exec /usr/bin/X11/xdm; then # any children? PARENTS=$(pidof /usr/bin/X11/xdm || true) CHILDREN= - for PROCESS in $PARENTS; do - # make sure we got numbers back - if ! [ $PROCESS -eq $PROCESS ] 2> /dev/null; then - # freak out - errormsg "ERROR: pidof returned non-numeric value!" - fi - # we could use grep -q here if ps would ignore SIGPIPE :-P - if (ps axj | grep "^ *$PROCESS" > /dev/null 2>&1); then - CHILDREN=yes - fi - done - if [ -n "$CHILDREN" ]; then - if [ -n "$HAVE_DEBCONF" ]; then - # ask the question - db_input high xdm/stop_running_server_with_children || true - db_go - # what did the user say? - db_get xdm/stop_running_server_with_children - ANSWER="$RET" - if [ "$ANSWER" = "true" ]; then - STOP=yes + if [ -n "$PARENTS" ]; then + for PROCESS in $PARENTS; do + # make sure we got numbers back + if ! [ $PROCESS -eq $PROCESS ] 2> /dev/null; then + # freak out + errormsg "ERROR: pidof returned non-numeric value!" fi - # forget that we have seen the question; this is the sort of - # non-configuration question that should be asked every time - db_fset xdm/stop_running_server_with_children seen false + # we could use grep -q here if ps would ignore SIGPIPE :-P + if (ps axj | grep "^ *$PROCESS" > /dev/null 2>&1); then + CHILDREN=yes + fi + done + if [ -n "$CHILDREN" ]; then + if [ -n "$HAVE_DEBCONF" ]; then + # ask the question + safe_debconf db_input high xdm/stop_running_server_with_children + safe_debconf db_go + # what did the user say? + safe_debconf db_get xdm/stop_running_server_with_children + ANSWER="$RET" + if [ "$ANSWER" = "true" ]; then + STOP=yes + fi + # forget that we have seen the question; this is the sort of + # non-configuration question that should be asked every time + safe_debconf db_fset xdm/stop_running_server_with_children seen false + fi + else + STOP=yes fi - else - STOP=yes fi fi fi if [ -n "$STOP" ]; then - invoke-rc.d $THIS_PACKAGE stop || true + invoke-rc.d "$THIS_PACKAGE" stop || true else if [ "$1" = "upgrade" -o "$1" = "failed-upgrade" ]; then touch /var/run/xdm.upgrade @@ -84,34 +88,42 @@ if [ "$1" = "remove" -o "$1" = "deconfigure" ]; then if [ -n "$HAVE_DEBCONF" ]; then # disown this question - db_unregister shared/default-x-display-manager + safe_debconf db_unregister shared/default-x-display-manager # does the question still exist? if db_get shared/default-x-display-manager; then - db_metaget shared/default-x-display-manager owners - db_subst shared/default-x-display-manager choices "$RET" - db_get shared/default-x-display-manager + safe_debconf db_metaget shared/default-x-display-manager owners + safe_debconf db_subst shared/default-x-display-manager choices "$RET" + safe_debconf db_get shared/default-x-display-manager # are we removing the currently selected display manager? - if [ "$THIS_PACKAGE" = "$RET" ]; then - if [ -e $DEFAULT_DISPLAY_MANAGER_FILE ]; then - db_get "$RET"/daemon_name - # does the display manager file reference the current default? - # if so, remove it because it will now be wrong - if [ "$(cat $DEFAULT_DISPLAY_MANAGER_FILE)" = "$RET" ]; then - rm $DEFAULT_DISPLAY_MANAGER_FILE + if [ -n "$RET" ]; then + if [ "$THIS_PACKAGE" = "$RET" ]; then + if [ -e "$DEFAULT_DISPLAY_MANAGER_FILE" ]; then + safe_debconf db_get "$RET/daemon_name" + # does the display manager file reference the current default? if + # so, remove it because it will now be wrong + if [ -n "$RET" ]; then + if [ "$(cat "$DEFAULT_DISPLAY_MANAGER_FILE")" = "$RET" ]; then + rm "$DEFAULT_DISPLAY_MANAGER_FILE" + fi + fi fi + # ask the user to choose a new default + safe_debconf db_fset shared/default-x-display-manager seen false + safe_debconf db_input critical shared/default-x-display-manager + safe_debconf db_go + # if the display manager file doesn't exist, write it with the path + # to the new default display manager + if [ ! -e "$DEFAULT_DISPLAY_MANAGER_FILE" ]; then + safe_debconf db_get shared/default-x-display-manager + if [ -n "$RET" ]; then + message "Please be sure to run \"dpkg-reconfigure $RET\"." + safe_debconf db_get "$RET"/daemon_name + if [ -n "$RET" ]; then + echo "$RET" > "$DEFAULT_DISPLAY_MANAGER_FILE" + fi + fi + fi fi - # ask the user to choose a new default - db_fset shared/default-x-display-manager seen false - db_input critical shared/default-x-display-manager || true - db_go - # if the display manager file doesn't exist, write it with the path - # to the new default display manager - if [ ! -e $DEFAULT_DISPLAY_MANAGER_FILE ]; then - db_get shared/default-x-display-manager - message "Please be sure to run \"dpkg-reconfigure $RET\"." - db_get "$RET"/daemon_name - echo "$RET" > $DEFAULT_DISPLAY_MANAGER_FILE - fi fi fi fi -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]