--- xfs-1.0.8.orig/autogen.sh +++ xfs-1.0.8/autogen.sh @@ -0,0 +1,13 @@ +#! /bin/sh + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +ORIGDIR=`pwd` +cd $srcdir + +autoreconf -v --install || exit 1 +cd $ORIGDIR || exit $? + +$srcdir/configure --enable-maintainer-mode "$@" + --- xfs-1.0.8.orig/debian/changelog +++ xfs-1.0.8/debian/changelog @@ -0,0 +1,191 @@ +xfs (1:1.0.8-3) unstable; urgency=low + + * Remove the -1 debian revisions from build-depends. + * Don't run dh_makeshlibs. + * Don't run update-rc.d twice in postinst and postrm, debhelper handles this + for us. + * Parse space-separated DEB_BUILD_OPTIONS as mandated by policy, and allow + parallel builds. + * Wrap debian/control's Build-Depends field. + * Run autoreconf on build; add build-deps on automake and xutils-dev. + * Add init.d status support (closes: #527970). Thanks, Peter Eisentraut! + * Don't stop xfs in runlevels 0 and 6 (closes: #500722). Thanks, Sven + Joachim! + * Bump debhelper compat level to 5 (lowest non-deprecated level). + * Update xsfbs to get README.source. + * Bump Standards-Version to 3.8.2. + * Set Maintainer to Debian QA Group (see bug#540362). + + -- Julien Cristau Sun, 09 Aug 2009 13:02:38 +0200 + +xfs (1:1.0.8-2.1) unstable; urgency=low + + * Non-maintainer upload. + * Fix fallout from switching to non-privileged user: + - Adjust config file to disable logging to file. + We log to syslog, but with this parameter, xfs tries to open + the logfile which fails because we run as nobody. + - postinst: create user debian-xfs for pidfile, + - init: create pidfile dir if necessary, change pifile location, + deal with two possible pidfile locations for stop et al, + - postrm: delete pid directory and user, + - add patch to change pid directory. + Closes: #498823. + + -- Thomas Viehmann Thu, 09 Oct 2008 22:32:45 +0200 + +xfs (1:1.0.8-2) unstable; urgency=low + + * Add $syslog dependency to the xfs init.d script (closes: #489232). + Thanks, Sven Joachim! + + -- Julien Cristau Mon, 07 Jul 2008 15:01:38 +0200 + +xfs (1:1.0.8-1.1) unstable; urgency=low + + * Non-maintainer upload to fix RC bug. + * Run xfs process as user nobody by default (Closes: #50859). Patch + from Petter Reinholdtsen. + * Build with -DUSE_SYSLOG to get the syslog option to work, to avoid + log rotation issue when xfs is running as a non-privileged + user (Closes: 481758). Patch from Sven Joachim. + + -- Petter Reinholdtsen Thu, 26 Jun 2008 22:45:42 +0200 + +xfs (1:1.0.8-1) unstable; urgency=low + + * New upstream release. + * Always restart the xfs daemon on upgrade from << 1:1.0.7 since the + old prerm script always stopped it on upgrade, closes: #482788. + * Update patches to not use -p0, closes: #485273. + + -- Brice Goglin Sat, 14 Jun 2008 18:41:28 +0200 + +xfs (1:1.0.7-2) unstable; urgency=low + + * Cherry-pick upstream commit 8144d75d to fix crash on startup, + closes: #482551. + + -- Brice Goglin Fri, 23 May 2008 18:56:37 +0200 + +xfs (1:1.0.7-1) unstable; urgency=low + + * New upstream release. + + Return an error to the log instead of segfaulting if + catalogue line is omitted from config file, closes: #148650 + * Remove the obsolete /etc/X11/fs/xfs.options, closes: #382776. + * Make sure maintainer scripts are generated during build, so that + xfs-specific scripts are actually used instead of dh_installinit + ones, causing the daemon to not always restart on upgrade, + closes: #457900. + + Add --no-start to dh_installinit so that default daemon restart + code is not automatically added after the xfs-specific one. + * Remove obsolete stuff from maintainer scripts. + * Add descriptive comment to top of init script, closes: #446275. + + -- Brice Goglin Thu, 22 May 2008 21:47:03 +0200 + +xfs (1:1.0.6-1) unstable; urgency=low + + * New upstream release. + + Drop 03_configurable_config_location.diff, applied upstream. + + Refresh 01_xfs_fixes.diff, partially applied upstream. + * Fix LSB header in xfs.init: don't stop in the S runlevel. Thanks, Petter + Reinholdtsen (closes: #470113). + * Install the upstream ChangeLog. + * Add Vcs-Git and Vcs-Browser fields. + * Add the upstream URL to debian/copyright. + * Bump Standards-Version: to 3.7.3, no change needed. + * Add myself to Uploaders, and remove Branden and Fabio with their + permission. + + -- Brice Goglin Tue, 11 Mar 2008 20:16:06 +0100 + +xfs (1:1.0.5-2) unstable; urgency=low + + * Run autoreconf, which was forgotten for 1:1.0.5-1. + + -- Julien Cristau Sun, 07 Oct 2007 00:10:32 +0200 + +xfs (1:1.0.5-1) unstable; urgency=high + + [ Brice Goglin ] + * Restore and update the old xfs.options.5 manpage which got lost + during the monolothic/modular transition. It might still help + since the maintainer scripts still look at the corresponding + config file. Closes: #364587. + + Use dh_installman + + [ David Nusinow ] + * New upstream release. High priority for security fixes. + + fix for integer overflows in build_range(). CVE-4568 + + Fix for heap overwrite in swap_char2b() CVE-2007-4568 + * Fix up 01_xfs_fixes.diff. This one needs to go upstream yesterday. + + -- David Nusinow Wed, 03 Oct 2007 21:11:50 -0400 + +xfs (1:1.0.4-2) unstable; urgency=high + + * High urgency upload for security fix. + * Fix race condition in the xfs init script (CVE-2007-3103). + * Remove obsolete information from README.Debian (closes: #376763). + + -- Julien Cristau Thu, 19 Jul 2007 15:24:35 +0200 + +xfs (1:1.0.4-1) unstable; urgency=low + + [ Julien Cristau ] + * New upstream release. + + Update patch 01_xfs_fixes.diff. + + Install the manpage as xfs.1, not xfs.1x. + * Don't put debug symbols in a nonexistent xfs-dbg package + (closes: #424113). + * Fix substitutions in xfs(1). (closes: #406829). + * Bump Standards-Version to 3.7.2 (no changes). + * Add LSB dependency info in xfs.init (closes: #335389). Thanks, Petter + Reinholdtsen! + + [ Brice Goglin ] + * Drop useless -DLIBXCURSOR from debian/rules. + + -- Julien Cristau Wed, 16 May 2007 13:50:33 +0200 + +xfs (1:1.0.1-5) unstable; urgency=low + + * Move config file back to /etc/X11/fs where it belongs. Thanks to Mike + Brodbelt, Otavio Salvador, and Margarita Manterola. Thanks to + Andreas Metzler for the patch. (closes: #362492) + * Run dh_install with --list-missing + * Add quilt to build-depends + + -- David Nusinow Mon, 8 May 2006 00:29:18 -0400 + +xfs (1:1.0.1-4) unstable; urgency=low + + * Upload to unstable + + -- David Nusinow Tue, 4 Apr 2006 18:44:42 -0400 + +xfs (1:1.0.1-3) experimental; urgency=low + + * Provide the correct copyright info + + -- David Nusinow Wed, 8 Mar 2006 00:42:29 -0500 + +xfs (1:1.0.1-2) experimental; urgency=low + + * Provide all our old packaging infrastrcture that I totally forgot. Thanks + Rasmus Bøg Hansen. (closes: #355762) + + Update config.cpp patch for our font locations and remove the cache + options because they're not working + + -- David Nusinow Tue, 7 Mar 2006 22:14:35 -0500 + +xfs (1:1.0.1-1) experimental; urgency=low + + * First modular upload to Debian + * Port patches from trunk + + general/003b_xfs_fixes.diff + + debian/906_debian_xfs.diff + + -- David Nusinow Sun, 5 Mar 2006 20:12:51 -0500 --- xfs-1.0.8.orig/debian/compat +++ xfs-1.0.8/debian/compat @@ -0,0 +1 @@ +5 --- xfs-1.0.8.orig/debian/xfs.init +++ xfs-1.0.8/debian/xfs.init @@ -0,0 +1,193 @@ +#!/bin/sh + +# $Id: xfs.init 189 2005-06-11 00:04:27Z branden $ + +# Copyright 1998-2004 Branden Robinson . +# +# This is free software; you may redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2, +# or (at your option) any later version. +# +# This is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License with +# the Debian operating system, in /usr/share/common-licenses/GPL; if +# not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +### BEGIN INIT INFO +# Provides: xfs +# Required-Start: $local_fs $remote_fs $syslog +# Required-Stop: $local_fs $remote_fs $syslog +# Should-Start: $network +# Should-Stop: $network +# Default-Start: 2 3 4 5 +# Default-Stop: 1 +# Short-Description: Start/stop script for the X Font Server. +# Description: For more information, see /usr/share/doc/xfs/README.Debian +# or run: man xfs +### END INIT INFO + +set -e + +PATH=/bin:/usr/bin:/sbin:/usr/sbin +DAEMON=/usr/bin/xfs +PIDDIR=/var/run/xfs +PIDFILE=$PIDDIR/xfs.pid +OLDPIDFILE=/var/run/xfs.pid +UPGRADEFILE=/var/run/xfs.daemon-not-stopped +SOCKET_DIR=/tmp/.font-unix + +test -x $DAEMON || exit 0 + +. /lib/lsb/init-functions + +do_restorecon () { + # Restore file security context (SELinux). + if which restorecon >/dev/null 2>&1; then + restorecon "$1" + fi +} + +set_up_socket_dir () { + echo -n "Setting up X font server socket directory $SOCKET_DIR..." + if [ -e $SOCKET_DIR ] && ! [ -d $SOCKET_DIR ]; then + mv $SOCKET_DIR $SOCKET_DIR.$$ + fi + if ! [ -d $SOCKET_DIR ]; then + mkdir -m 1777 $SOCKET_DIR || : + do_restorecon $SOCKET_DIR || : + fi + echo "done." +} + +set_up_pid_dir () { + if [ ! -d "$PIDDIR" ] ; then + mkdir $PIDDIR + chown debian-xfs $PIDDIR + fi +} + +stillrunning () { + if expr "$(cat /proc/$DAEMONPID/cmdline 2>/dev/null)" : "$DAEMON" >/dev/null \ + 2>&1; then + true + else + if [ -e $PIDFILE ]; then + echo -n " (removing stale $PIDFILE)" + rm $PIDFILE + fi + false + fi +} + + +# If there is only an old pidfile, use that. note that restart calls the start +# initscript, so that will use the new pidfile for the new xfs process +if [ "$1" = "restart" ] || [ "$1" = "reload" ] || [ "$1" = "stop" ] && \ + [ ! -e $PIDFILE ] && [ -e $OLDPIDFILE ] ; then + PIDFILE=$OLDPIDFILE +fi + +# If we have upgraded the daemon since we last started it, we can't use the +# --exec argument to start-stop-daemon, because the daemon's inode will have +# changed. The risk here is that in a situation where the daemon died, its +# pidfile was not cleaned up, we've upgraded it, *and* some other process is now +# running under that pid, start-stop-daemon will send signals to an innocent +# process. However, this seems like a corner case. C'est la vie! +if [ -e $UPGRADEFILE ]; then + SSD_START_ARGS="--pidfile $PIDFILE --startas $DAEMON" + SSD_STOP_ARGS="--pidfile $PIDFILE --name ${DAEMON#**/}" +else + SSD_START_ARGS="--pidfile $PIDFILE --exec $DAEMON" + SSD_STOP_ARGS="$SSD_START_ARGS" +fi + +case "$1" in + start) + set_up_socket_dir + set_up_pid_dir + echo -n "Starting X font server: xfs" + start-stop-daemon --start --quiet $SSD_START_ARGS -- -daemon -user debian-xfs -droppriv \ + || echo -n " already running" + echo "." + ;; + + restart) + /etc/init.d/xfs stop + if [ -f $PIDFILE ]; then + if stillrunning; then + exit 1 + fi + fi + /etc/init.d/xfs start + ;; + + reload) + echo -n "Reloading X font server configuration..." + if start-stop-daemon --stop --signal 1 --quiet $SSD_STOP_ARGS; then + echo "done." + else + echo "xfs not running." + fi + ;; + + force-reload) + /etc/init.d/xfs reload + ;; + + stop) + echo -n "Stopping X font server: xfs" + if ! [ -f $PIDFILE ]; then + echo " not running ($PIDFILE not found)" + # The daemon is not running; do not tell the maintainer scripts that it + # has not stopped. + rm -f $UPGRADEFILE + else + DAEMONPID=$(cat $PIDFILE | tr -d '[:blank:]') + KILLCOUNT=1 + if ! [ -e $UPGRADEFILE ]; then + if start-stop-daemon --stop --quiet $SSD_STOP_ARGS; then + # give xfs's signal handler a second to catch its breath + sleep 1 + else + echo -n " not running" + fi + fi + while [ $KILLCOUNT -le 5 ]; do + if stillrunning; then + kill $DAEMONPID + else + break + fi + sleep 1 + KILLCOUNT=$(( $KILLCOUNT + 1 )) + done + if stillrunning; then + echo -n " not responding to TERM signal (pid $DAEMONPID)" + else + # The daemon is not running; do not tell the maintainer scripts that it + # has not stopped. + rm -f $UPGRADEFILE + fi + fi + echo "." + ;; + + status) + status_of_proc -p $PIDFILE $DAEMON xfs + ;; + + *) + echo "Usage: /etc/init.d/xfs {start|stop|restart|reload|force-reload|status}" + exit 1 + ;; +esac + +exit 0 + +# vim:set ai et sts=2 sw=2 tw=80: --- xfs-1.0.8.orig/debian/copyright +++ xfs-1.0.8/debian/copyright @@ -0,0 +1,28 @@ +This package was downloaded from +http://xorg.freedesktop.org/releases/individual/app/ + +Copyright (c) 1988 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. --- xfs-1.0.8.orig/debian/rules +++ xfs-1.0.8/debian/rules @@ -0,0 +1,103 @@ +#!/usr/bin/make -f +# debian/rules for the Debian xfs package. +# Copyright © 2004 Scott James Remnant +# Copyright © 2005 Daniel Stone +# Copyright © 2005 David Nusinow + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# set this to the name of the main shlib's binary package +PACKAGE = xfs + +include debian/xsfbs/xsfbs.mk + +CFLAGS = -Wall -g +ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif +ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) + MAKEFLAGS += -j$(NUMJOBS) +endif + +CPPFLAGS = -DUSE_SYSLOG +DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) + confflags += --build=$(DEB_HOST_GNU_TYPE) +else + confflags += --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) +endif + +confflags += --enable-man-pages=3 + +build: build-stamp +build-stamp: $(STAMP_DIR)/patch $(STAMP_DIR)/genscripts + dh_testdir + autoreconf -vfi + mkdir -p obj-$(DEB_BUILD_GNU_TYPE) + cd obj-$(DEB_BUILD_GNU_TYPE) && \ + ../configure --prefix=/usr --mandir=\$${prefix}/share/man \ + --infodir=\$${prefix}/share/info \ + --sysconfdir=/etc $(confflags) \ + CFLAGS="$(CFLAGS)" \ + CPPFLAGS="$(CPPFLAGS)" + cd obj-$(DEB_BUILD_GNU_TYPE) && $(MAKE) + + touch build-stamp + +clean: xsfclean + dh_testdir + dh_testroot + rm -f build-stamp + + rm -f config.cache config.log config.status + rm -f */config.cache */config.log */config.status + rm -f conftest* */conftest* + rm -rf autom4te.cache */autom4te.cache + rm -rf obj-* + rm -f INSTALL aclocal.m4 config.guess config.sub configure + rm -f depcomp install-sh missing mkinstalldirs xfs-config.h.in + rm -f $$(find -name Makefile.in) + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + cd obj-$(DEB_BUILD_GNU_TYPE) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + + dh_installdocs + dh_install --sourcedir=debian/tmp --list-missing + dh_installman + dh_installchangelogs ChangeLog + dh_installexamples + dh_installinit --no-start -- start 20 2 3 4 5 . stop 80 1 . + dh_link + dh_strip + dh_compress + dh_fixperms + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +# Build architecture-independent files here. +binary-indep: build install +# Nothing to do + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install --- xfs-1.0.8.orig/debian/watch +++ xfs-1.0.8/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://xorg.freedesktop.org/releases/individual/app/ xfs-(.*)\.tar\.gz --- xfs-1.0.8.orig/debian/xfs.README.Debian +++ xfs-1.0.8/debian/xfs.README.Debian @@ -0,0 +1,28 @@ +Debian README for xfs package +============================= + +The default font catalogue for xfs as shipped with Debian GNU/Linux +searches the "misc" font directory before searching "cyrillic". Some fonts +in both of these directories claim the same font alias names (like +"fixed"). Therefore, the X font server will use whichever font it finds +first with that alias. To preferentially use Cyrillic fonts instead of the +Latin ones in misc, simply switch the order in which the paths appear in +the xfs font catalogue, defined in /etc/X11/fs/config. + +Also, be aware that, as of xfs 3.3.3.1-3, the default xfs configuration has +TCP port listening disabled for security reasons. If you have xfs serving +fonts to remote hosts via TCP, you will need to re-enable TCP connections; +you can do this by simply commenting out the "no-listen = tcp" line in +/etc/X11/fs/config. + +To use xfs you must add it to the X server's FontPath, in the "Files" section +of your xorg.conf file. + +Section "Files" + FontPath "unix/:7100" +EndSection + +For information on the /etc/X11/fs/config file, see the xfs(1) +manual page. + +vim:set ai et sts=4 sw=4 tw=80: --- xfs-1.0.8.orig/debian/control +++ xfs-1.0.8/debian/control @@ -0,0 +1,30 @@ +Source: xfs +Section: x11 +Priority: optional +Maintainer: Debian QA Group +Build-Depends: + debhelper (>= 5), + automake, + xutils-dev, + pkg-config, + libfs-dev (>= 2:1.0.0), + libxfont-dev (>= 1:1.0.0), + xtrans-dev (>= 1.0.0), + quilt +Standards-Version: 3.8.2 +Vcs-Git: git://git.debian.org/git/pkg-xorg/app/xfs +Vcs-Browser: http://git.debian.org/?p=pkg-xorg/app/xfs.git + +Package: xfs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lsb-base (>= 3.2-13) +Suggests: xfonts-100dpi | xfonts-75dpi, xfonts-base, xfonts-scalable +Description: X font server + xfs is a daemon that listens on a network port and serves X fonts to X + servers (and thus to X clients). All X servers have the ability to serve + locally installed fonts for themselves, but xfs makes it possible to offload + that job from the X server, and/or have a central repository of fonts on a + networked machine running xfs so that all the machines running X servers on a + network do not require their own set of fonts. xfs may also be invoked by + users to, for instance, make available X fonts in user accounts that are not + available to the X server or to an already running system xfs. --- xfs-1.0.8.orig/debian/xfs.install +++ xfs-1.0.8/debian/xfs.install @@ -0,0 +1,2 @@ +usr/bin/xfs +etc/X11/fs/config --- xfs-1.0.8.orig/debian/xfs.manpages +++ xfs-1.0.8/debian/xfs.manpages @@ -0,0 +1,2 @@ +debian/tmp/usr/share/man/man1/xfs.1 +debian/local/xfs.options.5 --- xfs-1.0.8.orig/debian/xfs.postinst.in +++ xfs-1.0.8/debian/xfs.postinst.in @@ -0,0 +1,58 @@ +#!/bin/sh +# Debian xfs package post-installation script +# Copyright 1998-2001, 2004 Branden Robinson. +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . +# Acknowledgements to Stephen Early, Mark Eichin, and Manoj Srivastava. + +# $Id: xfs.postinst.in 189 2005-06-11 00:04:27Z branden $ + +set -e + +# source debconf library +. /usr/share/debconf/confmodule + +THIS_PACKAGE=xfs +THIS_SCRIPT=postinst + +if ! getent passwd debian-$THIS_PACKAGE > /dev/null ; then + adduser --quiet --system --disabled-password \ + --home /nonexistant --no-create-home \ + --shell /bin/false --group debian-$THIS_PACKAGE +fi + +#INCLUDE_SHELL_LIB# + +# Registering the init scripts or starting the daemon may cause output to +# stdout, which can confuse debconf. +db_stop + +#DEBHELPER# + +# If we are not installing, we may or may not need to restart the daemon, but we +# always start the daemon on install. +NOSTART= +if ! [ -e /var/run/xfs.install ]; then + # Don't start the daemon if it wasn't stopped... + if [ -e /var/run/xfs.daemon-not-stopped ]; then + NOSTART=yes + fi + # ...or if the options file says not to. + if ! fgrep -qsx "restart-on-upgrade" /etc/X11/fs/xfs.options; then + NOSTART=yes + fi + # Before 1:1.0.7, the prerm script would always stop the daemon on upgrade, we always need to restart it + if dpkg --compare-versions "$2" lt 1:1.0.7; then + NOSTART= + fi +fi + +[ -n "$NOSTART" ] || invoke-rc.d xfs start || true + +# Remove install flag file. Leave the "daemon not stopped" flag file, if it +# exists, so that it will be seen by the init script. +rm -f /var/run/xfs.install + +exit 0 + +# vim:set ai et sts=2 sw=2 tw=80: --- xfs-1.0.8.orig/debian/xfs.postrm.in +++ xfs-1.0.8/debian/xfs.postrm.in @@ -0,0 +1,61 @@ +#!/bin/sh +# Debian xfs package post-removal script +# Copyright 1998-2001, 2004 Branden Robinson. +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . +# Acknowledgements to Stephen Early, Mark Eichin, and Manoj Srivastava. + +# $Id: xfs.postrm.in 189 2005-06-11 00:04:27Z branden $ + +set -e + +THIS_PACKAGE=xfs +THIS_SCRIPT=postrm + +#INCLUDE_SHELL_LIB# + +if [ "$1" = "abort-install" ]; then + rm -f /var/run/xfs.install +fi + +#DEBHELPER# + +if [ "$1" = "purge" ]; then + if [ -d /etc/X11/fs ]; then + rm -r /etc/X11/fs + fi + if [ -d /var/run/xfs ]; then + rm -r /var/run/xfs + fi + # Remove the user if we are relatively certain that we created it + u_home=$(getent passwd debian-$THIS_PACKAGE | cut -d ":" -f 6) + u_shell=$(getent passwd debian-$THIS_PACKAGE | cut -d ":" -f 7) + if [ "$u_home" = "/nonexistant" ] && [ "$u_shell" = "/bin/false" ] && [ -x /usr/sbin/deluser ] ; then + deluser --system --quiet debian-$THIS_PACKAGE + fi +fi + +if [ "$1" = "abort-upgrade" ]; then + # NOTE: The following is copied from the postinst script and isn't necessary + # if dpkg executes a package's postinst script with the "configure" argument + # after unwinding from a failed upgrade. (See section 6.5 of the Debian + # Policy Manual, "Details of unpack phase of installation or upgrade".) + + # Don't start the daemon if it wasn't stopped... + if [ -e /var/run/xfs.daemon-not-stopped ]; then + NOSTART=yes + fi + # ...or if the options file says not to. + if ! fgrep -qsx "restart-on-upgrade" /etc/X11/fs/xfs.options; then + NOSTART=yes + fi + + [ -n "$NOSTART" ] || invoke-rc.d xfs start || true + + # Remove flag files. + rm -f /var/run/xfs.install /var/run/xfs.daemon-not-stopped +fi + +exit 0 + +# vim:set ai et sts=2 sw=2 tw=80: --- xfs-1.0.8.orig/debian/xfs.preinst.in +++ xfs-1.0.8/debian/xfs.preinst.in @@ -0,0 +1,49 @@ +#!/bin/sh +# Debian xfs package pre-installation script +# Copyright 1998-2001, 2004 Branden Robinson. +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . +# Acknowledgements to Stephen Early, Mark Eichin, and Manoj Srivastava. + +# $Id: xfs.preinst.in 189 2005-06-11 00:04:27Z branden $ + +set -e + +THIS_PACKAGE=xfs +THIS_SCRIPT=preinst + +#INCLUDE_SHELL_LIB# + +if [ "$1" = "install" ]; then + # Create a flag file that tells the postinst script this is an install, not + # an upgrade. + : >/var/run/xfs.install +fi + +rm_conffile() { + PKGNAME="$1" + CONFFILE="$2" + if [ -e "$CONFFILE" ]; then + md5sum="`md5sum \"$CONFFILE\" | sed -e \"s/ .*//\"`" + old_md5sum="`dpkg-query -W -f='${Conffiles}' $PKGNAME | sed -n -e \"\\\\' $CONFFILE'{s/ obsolete$//;s/.* //p}\"`" + if [ "$md5sum" != "$old_md5sum" ]; then + echo "Obsolete conffile $CONFFILE has been modified by you, keeping it." + else + echo "Removing obsolete conffile $CONFFILE ..." + rm -f "$CONFFILE" + fi + fi +} + +case "$1" in +install|upgrade) + if dpkg --compare-versions "$2" le "1:1.0.6-1"; then + rm_conffile xfs "/etc/X11/fs/xfs.options" + fi +esac + +#DEBHELPER# + +exit 0 + +# vim:set ai et sts=2 sw=2 tw=80: --- xfs-1.0.8.orig/debian/xfs.prerm.in +++ xfs-1.0.8/debian/xfs.prerm.in @@ -0,0 +1,46 @@ +#!/bin/sh +# Debian xfs package pre-removal script +# Copyright 1998-2001, 2004 Branden Robinson. +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . +# Acknowledgements to Stephen Early, Mark Eichin, and Manoj Srivastava. + +# $Id: xfs.prerm.in 189 2005-06-11 00:04:27Z branden $ + +set -e + +THIS_PACKAGE=xfs +THIS_SCRIPT=prerm + +#INCLUDE_SHELL_LIB# + +case "$1" in + upgrade|failed-upgrade) + REMOVING= + ;; + remove|deconfigure) + REMOVING=yes + ;; +esac + +STOP= +# Are we supposed to restart on upgrade? If removing the package, we always +# stop the daemon. +if grep -qs ^restart-on-upgrade /etc/X11/fs/xfs.options || \ + [ -n "$REMOVING" ]; then + STOP=yes +fi + +if [ -n "$STOP" ]; then + invoke-rc.d xfs stop || true +else + # Create a flag file that tells the postinst and postrm scripts that the + # daemon was not stopped. + : >/var/run/xfs.daemon-not-stopped +fi + +#DEBHELPER# + +exit 0 + +# vim:set ai et sts=2 sw=2 tw=80: --- xfs-1.0.8.orig/debian/README.source +++ xfs-1.0.8/debian/README.source @@ -0,0 +1,73 @@ +------------------------------------------------------ +Quick Guide To Patching This Package For The Impatient +------------------------------------------------------ + +1. Make sure you have quilt installed +2. Unpack the package as usual with "dpkg-source -x" +3. Run the "patch" target in debian/rules +4. Create a new patch with "quilt new" (see quilt(1)) +5. Edit all the files you want to include in the patch with "quilt edit" + (see quilt(1)). +6. Write the patch with "quilt refresh" (see quilt(1)) +7. Run the "clean" target in debian/rules + +Alternatively, instead of using quilt directly, you can drop the patch in to +debian/patches and add the name of the patch to debian/patches/series. + +------------------------------------ +Guide To The X Strike Force Packages +------------------------------------ + +The X Strike Force team maintains X packages in git repositories on +git.debian.org in the pkg-xorg subdirectory. Most upstream packages +are actually maintained in git repositories as well, so they often +just need to be pulled into git.debian.org in a "upstream-*" branch. +Otherwise, the upstream sources are manually installed in the Debian +git repository. + +The .orig.tar.gz upstream source file could be generated this +"upstream-*" branch in the Debian git repository but it is actually +copied from upstream tarballs directly. + +Due to X.org being highly modular, packaging all X.org applications +as their own independent packages would have created too many Debian +packages. For this reason, some X.org applications have been grouped +into larger packages: xutils, xutils-dev, x11-apps, x11-session-utils, +x11-utils, x11-xfs-utils, x11-xkb-utils, x11-xserver-utils. +Most packages, including the X.org server itself and all libraries +and drivers are, however maintained independently. + +The Debian packaging is added by creating the "debian-*" git branch +which contains the aforementioned "upstream-*" branch plus the debian/ +repository files. +When a patch has to be applied to the Debian package, two solutions +are involved: +* If the patch is available in one of the upstream branches, it + may be git'cherry-picked into the Debian repository. In this + case, it appears directly in the .diff.gz. +* Otherwise, the patch is added to debian/patches/ which is managed + with quilt as documented in /usr/share/doc/quilt/README.source. + +quilt is actually invoked by the Debian X packaging through a larger +set of scripts called XSFBS. XSFBS brings some other X specific +features such as managing dependencies and conflicts due to the video +and input driver ABIs. +XSFBS itself is maintained in a separate repository at + git://git.debian.org/pkg-xorg/xsfbs.git +and it is pulled inside the other Debian X repositories when needed. + +The XSFBS patching system requires a build dependency on quilt. Also +a dependency on $(STAMP_DIR)/patch has to be added to debian/rules +so that the XSFBS patching occurs before the actual build. So the +very first target of the build (likely the one running autoreconf) +should depend on $(STAMP_DIR)/patch. It should also not depend on +anything so that parallel builds are correctly supported (nothing +should probably run while patching is being done). And finally, the +clean target should depend on the xsfclean target so that patches +are unapplied on clean. + +When the upstream sources contain some DFSG-nonfree files, they are +listed in text files in debian/prune/ in the "debian-*" branch of +the Debian repository. XSFBS' scripts then take care of removing +these listed files during the build so as to generate a modified +DFSG-free .orig.tar.gz tarball. --- xfs-1.0.8.orig/debian/local/xfs.options.5 +++ xfs-1.0.8/debian/local/xfs.options.5 @@ -0,0 +1,73 @@ +.\" $Id: xfs.options.5 189 2005-06-11 00:04:27Z branden $ +.\" +.\" Copyright 1998, 2002, 2004 Branden Robinson . +.\" +.\" This is free software; you may redistribute it and/or modify +.\" it under the terms of the GNU General Public License as +.\" published by the Free Software Foundation; version 2. +.\" +.\" This is distributed in the hope that it will be useful, but +.\" WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License with +.\" the Debian operating system, in /usr/share/common-licenses/GPL; if +.\" not, write to the Free Software Foundation, Inc., 59 Temple Place, +.\" Suite 330, Boston, MA 02111-1307 USA +.TH xfs.options 5 "2004\-11\-04" "Debian Project" +.SH NAME +xfs.options \- configuration options for the X font server +.SH DESCRIPTION +.I /etc/X11/fs/xfs.options +contains a set of flags that determine some of the behavior of the X font +server +.BR xfs (1). +.PP +.I /etc/X11/fs/xfs.options +may contain comments, which begin with a hash mark (\(oq#\(cq) and end at +the next newline, just like comments in shell scripts. +The rest of the file consists of options which are expressed as words +separated by hyphens, with only one option per line. +Options are enabled by simply placing them in the file; they are disabled +by prefixing the option name with \(oqno\-\(cq. +.PP +Available options are: +.TP +.B restart\-on\-upgrade +.B Enable this option with caution on \(oqproduction\(cq machines; +it causes the +.B xfs +daemon to be stopped and restarted on upgrade. +This will break all existing connections by X servers to the font server, +and as a result may deprive them of access to fonts. +In some situations this could be an unwelcome surprise (for instance, for +remote +.B xfs +users who had no idea the administrator was performing system maintenance). +On the other hand, for machines that stay up for long periods of time, +leaving the old daemon running can be a bad idea if the new version has, +for instance, a fix for a security vulnerability (overwriting +.BR xfs 's +executable on the file system has no effect on the copy of +.B xfs +in memory). +This behavior is disabled by default: +.B xfs +will be not be stopped or started during an upgrade of its package; the +administrator will have to do so by hand (with +.B invoke\-rc.d xfs restart +or by rebooting the system) before the newly installed +.B xfs +binary is used. +.PP +Since no options are enabled by default, +.I /etc/X11/fs/xfs.options +is not created automatically. +.SH AUTHOR +Branden Robinson customized +.BR xfs 's +package maintainer scripts to implement the functionality described above. +.SH SEE ALSO +.BR xfs (1) +.\" vim:set et tw=80: --- xfs-1.0.8.orig/debian/patches/01_xfs_fixes.diff +++ xfs-1.0.8/debian/patches/01_xfs_fixes.diff @@ -0,0 +1,273 @@ +$Id: 003b_xfs_fixes.diff 396 2005-07-22 21:45:02Z dnusinow $ + +This patch by Branden Robinson, Matthieu Herrb, and Nikita V. Youshchenko. + +os/utils.c: + - Handle pid files the way most other Unix daemons do. Use Matthieu + Herrb's version of StorePid(), which refuses to open pre-existing pid + files, and is more careful with the type of Pid_t. + - Allow the user to specify the pid filename on the command line with a + "-pid" option (courtesy of Nikita V. Youshchenko). + - Add RemovePid() function which removes the process ID file, and + register it with atexit() so that it is automatically invoked when xfs + exits. + - Sort options in usage message alphabetically. + - Refer to "user ID" and "process ID" in diagnostic messages, not + "userid" and "process-id". + - Remove duplicate unconditional #include of stdlib.h. + - Wrap long lines. + - Whitespace police. + +Some previous parts of this patch (against xfs.man) have been applied upstream. + +Index: a/os/utils.c +=================================================================== +--- a/os/utils.c.orig 2007-10-03 20:34:16.000000000 -0400 ++++ b/os/utils.c 2007-10-03 20:34:57.000000000 -0400 +@@ -3,7 +3,7 @@ + * misc os utilities + */ + /* +- ++ + Copyright 1990, 1991, 1998 The Open Group + + Permission to use, copy, modify, distribute, and sell this software and its +@@ -27,7 +27,7 @@ + in this Software without prior written authorization from The Open Group. + + * Copyright 1990, 1991 Network Computing Devices; +- * Portions Copyright 1987 by Digital Equipment Corporation ++ * Portions Copyright 1987 by Digital Equipment Corporation + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided +@@ -90,8 +90,6 @@ + #define SIGNALS_RESET_WHEN_CAUGHT + #endif + +-#include +- + extern char *configfilename; + static Bool dropPriv = FALSE; /* whether or not to drop root privileges */ + #ifdef DEFAULT_DAEMON +@@ -116,7 +114,8 @@ + static char *pidFile = XFSPIDDIR "/xfs.pid"; + static int pidFd; + static FILE *pidFilePtr; +-static int StorePid (void); ++static long StorePid (void); ++static void RemovePid (void); + + /* ARGSUSED */ + SIGVAL +@@ -219,7 +218,9 @@ + static void + usage(void) + { +- fprintf(stderr, "usage: %s [-config config_file] [-port tcp_port] [-droppriv] [-daemon] [-nodaemon] [-user user_name] [-ls listen_socket]\n", ++ fprintf(stderr, "usage: %s [-config config_file] [-daemon] [-droppriv]" ++ " [-ls listen_socket] [-nodaemon] [-pid pid_file]" ++ " [-port tcp_port] [-user user_name]\n", + progname); + exit(1); + } +@@ -242,7 +243,7 @@ + * + * [] denotes optional and ... denotes repitition. + * +- * The string must be _exactly_ in the above format. ++ * The string must be _exactly_ in the above format. + */ + + void +@@ -260,7 +261,7 @@ + count++; + ptr++; + } +- ++ + OldListenCount = count + 1; + OldListen = (OldListenRec *) malloc ( + OldListenCount * sizeof (OldListenRec)); +@@ -349,6 +350,11 @@ + configfilename = argv[++i]; + else + usage(); ++ } else if (!strcmp(argv[i], "-pid")) { ++ if (argv[i + 1]) ++ pidFile = argv[++i]; ++ else ++ usage(); + } + #ifdef MEMBUG + else if ( strcmp( argv[i], "-alloc") == 0) +@@ -392,7 +398,7 @@ + FSalloc (unsigned long amount) + { + register pointer ptr; +- ++ + if ((long)amount < 0) + return 0; + if (amount == 0) +@@ -462,21 +468,21 @@ + FatalError("out of memory\n"); + return 0; + } +- ++ + /***************** + * FSfree +- * calls free +- *****************/ ++ * calls free ++ *****************/ + + void + FSfree(pointer ptr) + { + #ifdef MEMBUG + if (ptr) +- ffree((char *)ptr); ++ ffree((char *)ptr); + #else + if (ptr) +- free((char *)ptr); ++ free((char *)ptr); + #endif + } + +@@ -511,11 +517,12 @@ + } + #endif /* QNX4 */ + if (setuid(pwent->pw_uid)) { +- FatalError("fatal: couldn't set userid to %s user\n", user); ++ FatalError("fatal: couldn't set user ID to %s user\n", user); + } + } + } else if (dropPriv || userId) { +- FatalError("fatal: -droppriv or -user flag specified, but xfs not run as root\n"); ++ FatalError("fatal: -droppriv or -user flag specified, but xfs not" ++ " invoked by root user\n"); + } + } + +@@ -523,48 +530,76 @@ + void + SetDaemonState(void) + { +- int oldpid; ++ long oldpid; + + if (becomeDaemon) { + BecomeDaemon(); + if ((oldpid = StorePid ())) { + if (oldpid == -1) +- ErrorF ("error opening process-id file %s\n", pidFile); ++ ErrorF ("error opening process ID file %s\n", pidFile); + else + ErrorF ("process-id file %s indicates another xfs is " +- "running (pid %d); exiting\n", pidFile, oldpid); ++ "running (pid %ld); exiting\n", pidFile, oldpid); + exit(1); + } ++ if (atexit (RemovePid)) ++ ErrorF ("could not register RemovePid() with atexit()\n"); + } + } + + +-static int ++static long ++/* ++ * Create and populate file storing process ID. ++ */ + StorePid (void) + { +- int oldpid; ++ long oldpid; ++ char pidstr[11]; /* enough space for a 32-bit pid plus \0 */ ++ size_t pidstrlen; + +- if (pidFile[0] != '\0') { +- pidFd = open (pidFile, O_RDWR); +- if (pidFd == -1 && errno == ENOENT) +- pidFd = open (pidFile, O_RDWR|O_CREAT, 0666); +- if (pidFd == -1 || !(pidFilePtr = fdopen (pidFd, "r+"))) ++ if (pidFile[0] != '\0') ++ { ++ pidFd = open (pidFile, O_WRONLY|O_CREAT|O_EXCL, 0666); ++ if (pidFd == -1) + { +- ErrorF ("cannot open process-id file %s: %s\n", pidFile, +- strerror (errno)); +- return -1; ++ if (errno == EEXIST) ++ { ++ /* pidFile already exists; see if we can open it */ ++ pidFilePtr = fopen (pidFile, "r"); ++ if (pidFilePtr == NULL) ++ { ++ ErrorF ("cannot open process ID file %s for reading: " ++ "%s\n", pidFile, strerror (errno)); ++ return -1; ++ } ++ if (fscanf (pidFilePtr, "%ld\n", &oldpid) != 1) ++ { ++ ErrorF ("existing process ID file %s empty or contains " ++ "garbage\n", pidFile); ++ oldpid = -1; ++ } ++ fclose (pidFilePtr); ++ return oldpid; ++ } ++ else ++ { ++ ErrorF ("cannot fdopen process ID file %s for writing: " ++ "%s\n", pidFile, strerror (errno)); ++ return -1; ++ } + } +- if (fscanf (pidFilePtr, "%d\n", &oldpid) != 1) +- oldpid = -1; +- if (fseek (pidFilePtr, 0L, SEEK_SET) == -1) ++ if ((pidFilePtr = fdopen (pidFd, "w")) == NULL) + { +- ErrorF ("cannot seek process-id file %s: %s\n", pidFile, +- strerror (errno)); +- return -1; ++ ErrorF ("cannot open process ID file %s for writing: %s\n", ++ pidFile, strerror (errno)); ++ return -1; + } +- if (fprintf (pidFilePtr, "%11ld\n", (long) getpid ()) != 12) ++ (void) snprintf (pidstr, 11, "%ld", (long) getpid()); ++ pidstrlen = strlen (pidstr); ++ if (fprintf (pidFilePtr, "%s\n", pidstr) != ( pidstrlen + 1)) + { +- ErrorF ("cannot write to process-id file %s: %s\n", pidFile, ++ ErrorF ("cannot write to process ID file %s: %s\n", pidFile, + strerror (errno)); + return -1; + } +@@ -573,3 +608,19 @@ + } + return 0; + } ++ ++ ++/* ++ * Remove process ID file. This function should be registered with atexit(). ++ */ ++static void ++RemovePid (void) ++{ ++#ifdef DEBUG ++ fprintf (stderr, "unlinking process ID file %s\n", pidFile); ++#endif ++ if (unlink (pidFile)) ++ if (errno != ENOENT) ++ ErrorF ("cannot remove process ID file %s: %s\n", pidFile, ++ strerror (errno)); ++} --- xfs-1.0.8.orig/debian/patches/02_debian_setup.diff +++ xfs-1.0.8/debian/patches/02_debian_setup.diff @@ -0,0 +1,40 @@ +$Id: 906_debian_xfs.diff 428 2005-07-28 04:30:44Z dnusinow $ + +Set up defaults that make more sense for Debian. + +This patch by Branden Robinson. + +Index: a/config.cpp +=================================================================== +--- a/config.cpp.orig 2006-03-07 22:09:01.000000000 -0500 ++++ b/config.cpp 2006-03-07 22:13:53.000000000 -0500 +@@ -1,15 +1,20 @@ + XCOMM font server configuration file + XCOMM $Xorg: config.cpp,v 1.3 2000/08/17 19:54:19 cpqbld Exp $ + ++XCOMM allow a maximum of 10 clients to connect to this font server ++client-limit = 10 ++XCOMM when a font server reaches its limit, start up a new one + clone-self = on +-use-syslog = off +-catalogue = DEFAULTFONTPATH ++XCOMM log messages to FSERRORS ++XCOMM (Debian xfs uses syslog by default to run as nobody) +-error-file = FSERRORS ++XCOMM error-file = FSERRORS ++XCOMM log errors using syslog ++use-syslog = on ++XCOMM turn off TCP port listening (Unix domain connections are still permitted) ++no-listen = tcp ++XCOMM paths to search for fonts ++catalogue = /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/cyrillic/,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/75dpi/ + XCOMM in decipoints + default-point-size = 120 +-default-resolutions = 75,75,100,100 +- +-XCOMM font cache control, specified in KB +-cache-hi-mark = 2048 +-cache-low-mark = 1433 +-cache-balance = 70 ++XCOMM x1,y1,x2,y2,... ++default-resolutions = 100,100,75,75 --- xfs-1.0.8.orig/debian/patches/series +++ xfs-1.0.8/debian/patches/series @@ -0,0 +1,3 @@ +01_xfs_fixes.diff +02_debian_setup.diff +03_debian_piddir.diff --- xfs-1.0.8.orig/debian/patches/03_debian_piddir.diff +++ xfs-1.0.8/debian/patches/03_debian_piddir.diff @@ -0,0 +1,13 @@ +diff -u xfs-1.0.8~/Makefile.am xfs-1.0.8/Makefile.am +--- xfs-1.0.8~/Makefile.am 2008-05-16 20:23:17.000000000 +0200 ++++ xfs-1.0.8/Makefile.am 2008-10-10 20:10:12.000000000 +0200 +@@ -25,7 +25,7 @@ + + FONT_FLAGS = -DFONT_PCF -DFONT_FS -DFONT_SPEEDO + +-AM_CPPFLAGS = $(XFS_CFLAGS) -I$(top_srcdir)/include -DXFSPIDDIR=\"/var/run\" \ ++AM_CPPFLAGS = $(XFS_CFLAGS) -I$(top_srcdir)/include -DXFSPIDDIR=\"/var/run/xfs\" \ + $(FONT_FLAGS) -D_BSD_SOURCE -DFONT_t -DTRANS_SERVER -DTRANS_REOPEN + + LDADD = $(XFS_LIBS) +diff -u xfs-1.0.8~/Makefile.in xfs-1.0.8/Makefile.in --- xfs-1.0.8.orig/debian/xsfbs/xsfbs.mk +++ xfs-1.0.8/debian/xsfbs/xsfbs.mk @@ -0,0 +1,293 @@ +#!/usr/bin/make -f + +# Debian X Strike Force Build System (XSFBS): Make portion + +# Copyright 1996 Stephen Early +# Copyright 1997 Mark Eichin +# Copyright 1998-2005, 2007 Branden Robinson +# Copyright 2005 David Nusinow +# +# Licensed under the GNU General Public License, version 2. See the file +# /usr/share/common-licenses/GPL or . + +# Originally by Stephen Early +# Modified by Mark W. Eichin +# Modified by Adam Heath +# Modified by Branden Robinson +# Modified by Fabio Massimo Di Nitto +# Modified by David Nusinow +# Acknowledgements to Manoj Srivastava. + +# Pass $(DH_OPTIONS) into the environment for debhelper's benefit. +export DH_OPTIONS + +# force quilt to not use ~/.quiltrc and to use debian/patches +QUILT = QUILT_PATCHES=debian/patches quilt --quiltrc /dev/null + +# Set up parameters for the upstream build environment. + +# Determine (source) package name from Debian changelog. +SOURCE_NAME:=$(shell dpkg-parsechangelog -ldebian/changelog \ + | grep '^Source:' | awk '{print $$2}') + +# Determine package version from Debian changelog. +SOURCE_VERSION:=$(shell dpkg-parsechangelog -ldebian/changelog \ + | grep '^Version:' | awk '{print $$2}') + +# Determine upstream version number. +UPSTREAM_VERSION:=$(shell echo $(SOURCE_VERSION) | sed 's/-.*//') + +# Determine the source version without the epoch for make-orig-tar-gz +NO_EPOCH_VER:=$(shell echo $(UPSTREAM_VERSION) | sed 's/^.://') + +# Figure out who's building this package. +BUILDER:=$(shell echo $${DEBEMAIL:-$${EMAIL:-$$(echo $$LOGNAME@$$(cat /etc/mailname 2>/dev/null))}}) + +# Find out if this is an official build; an official build has nothing but +# digits, dots, and/or the codename of a release in the Debian part of the +# version number. Anything else indicates an unofficial build. +OFFICIAL_BUILD:=$(shell VERSION=$(SOURCE_VERSION); if ! expr "$$(echo $${VERSION\#\#*-} | sed 's/\(woody\|sarge\|etch\|lenny\)//g')" : ".*[^0-9.].*" >/dev/null 2>&1; then echo yes; fi) + +# Set up parameters for the Debian build environment. + +# Determine our architecture. +BUILD_ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH) +# Work around some old-time dpkg braindamage. +BUILD_ARCH:=$(subst i486,i386,$(BUILD_ARCH)) +# The DEB_HOST_ARCH variable may be set per the Debian cross-compilation policy. +ifdef DEB_HOST_ARCH + ARCH:=$(DEB_HOST_ARCH) +else + # dpkg-cross sets the ARCH environment variable; if set, use it. + ifdef ARCH + ARCH:=$(ARCH) + else + ARCH:=$(BUILD_ARCH) + endif +endif + +# $(STAMP_DIR) houses stamp files for complex targets. +STAMP_DIR:=stampdir + +# $(DEBTREEDIR) is where all install rules are told (via $(DESTDIR)) to place +# their files. +DEBTREEDIR:=$(CURDIR)/debian/tmp + +# All "important" targets have four lines: +# 1) A target name that is invoked by a package-building tool or the user. +# This consists of a dependency on a "$(STAMP_DIR)/"-prefixed counterpart. +# 2) A line delcaring 1) as a phony target (".PHONY:"). +# 3) A "$(STAMP_DIR)/"-prefixed target which does the actual work, and may +# depend on other targets. +# 4) A line declaring 3) as a member of the $(stampdir_targets) variable; the +# "$(STAMP_DIR)/" prefix is omitted. +# +# This indirection is needed so that the "stamp" files that signify when a rule +# is done can be located in a separate "stampdir". Recall that make has no way +# to know when a goal has been met for a phony target (like "build" or +# "install"). +# +# At the end of each "$(STAMP_DIR)/" target, be sure to run the command ">$@" +# so that the target will not be run again. Removing the file will make Make +# run the target over. + +# All phony targets should be declared as dependencies of .PHONY, even if they +# do not have "($STAMP_DIR)/"-prefixed counterparts. + +# Define a harmless default rule to keep things from going nuts by accident. +.PHONY: default +default: + +# Set up the $(STAMP_DIR) directory. +.PHONY: stampdir +stampdir_targets+=stampdir +stampdir: $(STAMP_DIR)/stampdir +$(STAMP_DIR)/stampdir: + mkdir $(STAMP_DIR) + >$@ + +# Set up the package build directory as quilt expects to find it. +.PHONY: prepare +stampdir_targets+=prepare +prepare: $(STAMP_DIR)/prepare +$(STAMP_DIR)/prepare: $(STAMP_DIR)/log $(STAMP_DIR)/genscripts + >$@ + +.PHONY: log +stampdir_targets+=log +log: $(STAMP_DIR)/log +$(STAMP_DIR)/log: $(STAMP_DIR)/stampdir + mkdir -p $(STAMP_DIR)/log + +# Apply all patches to the upstream source. +.PHONY: patch +stampdir_targets+=patch +patch: $(STAMP_DIR)/patch +$(STAMP_DIR)/patch: $(STAMP_DIR)/prepare + if ! [ `which quilt` ]; then \ + echo "Couldn't find quilt. Please install it or add it to the build-depends for this package."; \ + exit 1; \ + fi; \ + if $(QUILT) next >/dev/null 2>&1; then \ + echo -n "Applying patches..."; \ + if $(QUILT) push -a -v >$(STAMP_DIR)/log/patch 2>&1; then \ + cat $(STAMP_DIR)/log/patch; \ + echo "successful."; \ + else \ + cat $(STAMP_DIR)/log/patch; \ + echo "failed! (check $(STAMP_DIR)/log/patch for details)"; \ + exit 1; \ + fi; \ + else \ + echo "No patches to apply"; \ + fi; \ + >$@ + +# Revert all patches to the upstream source. +.PHONY: unpatch +unpatch: $(STAMP_DIR)/log + rm -f $(STAMP_DIR)/patch + @echo -n "Unapplying patches..."; \ + if $(QUILT) applied >/dev/null 2>/dev/null; then \ + if $(QUILT) pop -a -v >$(STAMP_DIR)/log/unpatch 2>&1; then \ + cat $(STAMP_DIR)/log/unpatch; \ + echo "successful."; \ + else \ + cat $(STAMP_DIR)/log/unpatch; \ + echo "failed! (check $(STAMP_DIR)/log/unpatch for details)"; \ + exit 1; \ + fi; \ + else \ + echo "nothing to do."; \ + fi + +# Clean the generated maintainer scripts. +.PHONY: cleanscripts +cleanscripts: + rm -f $(STAMP_DIR)/genscripts + rm -f debian/*.config \ + debian/*.postinst \ + debian/*.postrm \ + debian/*.preinst \ + debian/*.prerm + +# Clean the package build tree. +.PHONY: xsfclean +xsfclean: cleanscripts unpatch + dh_testdir + rm -rf .pc + rm -rf $(STAMP_DIR) $(SOURCE_DIR) + rm -rf imports + dh_clean debian/shlibs.local \ + debian/po/pothead + +# Generate the debconf templates POT file header. +debian/po/pothead: debian/po/pothead.in + sed -e 's/SOURCE_VERSION/$(SOURCE_VERSION)/' \ + -e 's/DATE/$(shell date "+%F %X%z"/)' <$< >$@ + +# Update POT and PO files. +.PHONY: updatepo +updatepo: debian/po/pothead + debian/scripts/debconf-updatepo --pot-header=pothead --verbose + +# Remove files from the upstream source tree that we don't need, or which have +# licensing problems. It must be run before creating the .orig.tar.gz. +# +# Note: This rule is for Debian package maintainers' convenience, and is not +# needed for conventional build scenarios. +.PHONY: prune-upstream-tree +prune-upstream-tree: + # Ensure we're in the correct directory. + dh_testdir + grep -rvh '^#' debian/prune/ | xargs --no-run-if-empty rm -rf + +# Verify that there are no offsets or fuzz in the patches we apply. +# +# Note: This rule is for Debian package maintainers' convenience, and is not +# needed for conventional build scenarios. +.PHONY: patch-audit +patch-audit: prepare unpatch + @echo -n "Auditing patches..."; \ + >$(STAMP_DIR)/log/patch; \ + FUZZY=; \ + while [ -n "$$($(QUILT) next)" ]; do \ + RESULT=$$($(QUILT) push -v | tee -a $(STAMP_DIR)/log/patch | grep ^Hunk | sed 's/^Hunk.*\(succeeded\|FAILED\).*/\1/');\ + case "$$RESULT" in \ + succeeded) \ + echo "fuzzy patch: $$($(QUILT) top)" \ + | tee -a $(STAMP_DIR)/log/$$($(QUILT) top); \ + FUZZY=yes; \ + ;; \ + FAILED) \ + echo "broken patch: $$($(QUILT) next)" \ + | tee -a $(STAMP_DIR)/log/$$($(QUILT) next); \ + exit 1; \ + ;; \ + esac; \ + done; \ + if [ -n "$$FUZZY" ]; then \ + echo "there were fuzzy patches; please fix."; \ + exit 1; \ + else \ + echo "done."; \ + fi + +# Generate the maintainer scripts. +.PHONY: genscripts +stampdir_targets+=genscripts +genscripts: $(STAMP_DIR)/genscripts +$(STAMP_DIR)/genscripts: $(STAMP_DIR)/stampdir + for FILE in debian/*.config.in \ + debian/*.postinst.in \ + debian/*.postrm.in \ + debian/*.preinst.in \ + debian/*.prerm.in; do \ + if [ -e "$$FILE" ]; then \ + MAINTSCRIPT=$$(echo $$FILE | sed 's/.in$$//'); \ + sed -n '1,/^#INCLUDE_SHELL_LIB#$$/p' <$$FILE \ + | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >$$MAINTSCRIPT.tmp; \ + cat debian/xsfbs/xsfbs.sh >>$$MAINTSCRIPT.tmp; \ + sed -n '/^#INCLUDE_SHELL_LIB#$$/,$$p' <$$FILE \ + | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >>$$MAINTSCRIPT.tmp; \ + sed -e 's/@SOURCE_VERSION@/$(SOURCE_VERSION)/' \ + -e 's/@OFFICIAL_BUILD@/$(OFFICIAL_BUILD)/' \ + -e 's/@DEFAULT_DCRESOLUTIONS@/$(DEFAULT_DCRESOLUTIONS)/' \ + <$$MAINTSCRIPT.tmp >$$MAINTSCRIPT; \ + rm $$MAINTSCRIPT.tmp; \ + fi; \ + done + # Validate syntax of generated shell scripts. + #sh debian/scripts/validate-posix-sh debian/*.config \ + # debian/*.postinst \ + # debian/*.postrm \ + # debian/*.preinst \ + # debian/*.prerm + >$@ + +# Generate the shlibs.local file. +debian/shlibs.local: + cat debian/*.shlibs >$@ + +SERVERMINVERS = $(shell cat /usr/share/xserver-xorg/serverminver 2>/dev/null) +VIDEOABI = $(shell cat /usr/share/xserver-xorg/videoabiver 2>/dev/null) +INPUTABI = $(shell cat /usr/share/xserver-xorg/inputabiver 2>/dev/null) +SERVER_DEPENDS = xserver-xorg-core (>= $(SERVERMINVERS)) +VIDDRIVER_PROVIDES = xserver-xorg-video-$(VIDEOABI) +INPDRIVER_PROVIDES = xserver-xorg-input-$(INPUTABI) +ifeq ($(PACKAGE),) +PACKAGE=$(shell awk '/^Package:/ { print $$2; exit }' < debian/control) +endif + +.PHONY: serverabi +serverabi: install +ifeq ($(SERVERMINVERS),) + @echo error: xserver-xorg-dev needs to be installed + @exit 1 +else + echo "xserver:Depends=$(SERVER_DEPENDS)" >> debian/$(PACKAGE).substvars + echo "xviddriver:Provides=$(VIDDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars + echo "xinpdriver:Provides=$(INPDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars +endif + +# vim:set noet ai sts=8 sw=8 tw=0: --- xfs-1.0.8.orig/debian/xsfbs/xsfbs.sh +++ xfs-1.0.8/debian/xsfbs/xsfbs.sh @@ -0,0 +1,853 @@ +# $Id$ + +# This is the X Strike Force shell library for X Window System package +# maintainer scripts. It serves to define shell functions commonly used by +# such packages, and performs some error checking necessary for proper operation +# of those functions. By itself, it does not "do" much; the maintainer scripts +# invoke the functions defined here to accomplish package installation and +# removal tasks. + +# If you are reading this within a Debian package maintainer script (e.g., +# /var/lib/dpkg)info/PACKAGE.{config,preinst,postinst,prerm,postrm}), you can +# skip past this library by scanning forward in this file to the string +# "GOBSTOPPER". + +SOURCE_VERSION=@SOURCE_VERSION@ +OFFICIAL_BUILD=@OFFICIAL_BUILD@ + +# Use special abnormal exit codes so that problems with this library are more +# easily tracked down. +SHELL_LIB_INTERNAL_ERROR=86 +SHELL_LIB_THROWN_ERROR=74 +SHELL_LIB_USAGE_ERROR=99 + +# old -> new variable names +if [ -z "$DEBUG_XORG_PACKAGE" ] && [ -n "$DEBUG_XFREE86_PACKAGE" ]; then + DEBUG_XORG_PACKAGE="$DEBUG_XFREE86_PACKAGE" +fi +if [ -z "$DEBUG_XORG_DEBCONF" ] && [ -n "$DEBUG_XFREE86_DEBCONF" ]; then + DEBUG_XORG_DEBCONF="$DEBUG_XFREE86_DEBCONF" +fi + +# initial sanity checks +if [ -z "$THIS_PACKAGE" ]; then + cat >&2 < on the World Wide Web for +instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the +"doc-debian" package, or install the "reportbug" package and use the command of +the same name to file a report against version $SOURCE_VERSION of this package. +EOF + exit $SHELL_LIB_USAGE_ERROR +fi + +if [ -z "$THIS_SCRIPT" ]; then + cat >&2 < on the World Wide Web for +instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the +"doc-debian" package, or install the "reportbug" package and use the command of +the same name to file a report against version $SOURCE_VERSION of the +"$THIS_PACKAGE" package. +EOF + exit $SHELL_LIB_USAGE_ERROR +fi + +if [ "$1" = "reconfigure" ] || [ -n "$DEBCONF_RECONFIGURE" ]; then + RECONFIGURE="true" +else + RECONFIGURE= +fi + +if ([ "$1" = "install" ] || [ "$1" = "configure" ]) && [ -z "$2" ]; then + FIRSTINST="yes" +fi + +if [ -z "$RECONFIGURE" ] && [ -z "$FIRSTINST" ]; then + UPGRADE="yes" +fi + +trap "message;\ + message \"Received signal. Aborting $THIS_PACKAGE package $THIS_SCRIPT script.\";\ + message;\ + exit 1" HUP INT QUIT TERM + +reject_nondigits () { + # syntax: reject_nondigits [ operand ... ] + # + # scan operands (typically shell variables whose values cannot be trusted) for + # characters other than decimal digits and barf if any are found + while [ -n "$1" ]; do + # does the operand contain anything but digits? + if ! expr "$1" : "[[:digit:]]\+$" > /dev/null 2>&1; then + # can't use die(), because it wraps message() which wraps this function + echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_nondigits() encountered" \ + "possibly malicious garbage \"$1\"" >&2 + exit $SHELL_LIB_THROWN_ERROR + fi + shift + done +} + +reject_whitespace () { + # syntax: reject_whitespace [ operand ] + # + # scan operand (typically a shell variable whose value cannot be trusted) for + # whitespace characters and barf if any are found + if [ -n "$1" ]; then + # does the operand contain any whitespace? + if expr "$1" : "[[:space:]]" > /dev/null 2>&1; then + # can't use die(), because I want to avoid forward references + echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_whitespace() encountered" \ + "possibly malicious garbage \"$1\"" >&2 + exit $SHELL_LIB_THROWN_ERROR + fi + fi +} + +reject_unlikely_path_chars () { + # syntax: reject_unlikely_path_chars [ operand ... ] + # + # scan operands (typically shell variables whose values cannot be trusted) for + # characters unlikely to be seen in a path and which the shell might + # interpret and barf if any are found + while [ -n "$1" ]; do + # does the operand contain any funny characters? + if expr "$1" : '.*[!$&()*;<>?|].*' > /dev/null 2>&1; then + # can't use die(), because I want to avoid forward references + echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_unlikely_path_chars()" \ + "encountered possibly malicious garbage \"$1\"" >&2 + exit $SHELL_LIB_THROWN_ERROR + fi + shift + done +} + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the +# event the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while +# the script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2> /dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" > /dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +message () { + # pretty-print messages of arbitrary length + reject_nondigits "$COLUMNS" + echo "$*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} >&2 +} + +observe () { + # syntax: observe message ... + # + # issue observational message suitable for logging someday when support for + # it exists in dpkg + if [ -n "$DEBUG_XORG_PACKAGE" ]; then + message "$THIS_PACKAGE $THIS_SCRIPT note: $*" + fi +} + +warn () { + # syntax: warn message ... + # + # issue warning message suitable for logging someday when support for + # it exists in dpkg; also send to standard error + message "$THIS_PACKAGE $THIS_SCRIPT warning: $*" +} + +die () { + # syntax: die message ... + # + # exit script with error message + message "$THIS_PACKAGE $THIS_SCRIPT error: $*" + exit $SHELL_LIB_THROWN_ERROR +} + +internal_error () { + # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message + message "internal error: $*" + if [ -n "$OFFICIAL_BUILD" ]; then + message "Please report a bug in the $THIS_SCRIPT script of the" \ + "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \ + "Tracking System. Include all messages above that mention the" \ + "$THIS_PACKAGE package. Visit " \ + " on the World Wide Web for" \ + "instructions, read the file" \ + "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \ + "package, or install the reportbug package and use the command of" \ + "the same name to file a report." + fi + exit $SHELL_LIB_INTERNAL_ERROR +} + +usage_error () { + message "usage error: $*" + message "Please report a bug in the $THIS_SCRIPT script of the" \ + "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \ + "Tracking System. Include all messages above that mention the" \ + "$THIS_PACKAGE package. Visit " \ + " on the World Wide Web for" \ + "instructions, read the file" \ + "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \ + "package, or install the reportbug package and use the command of" \ + "the same name to file a report." + exit $SHELL_LIB_USAGE_ERROR +} + + +maplink () { + # returns what symlink should point to; i.e., what the "sane" answer is + # Keep this in sync with the debian/*.links files. + # This is only needed for symlinks to directories. + # + # XXX: Most of these look wrong in the X11R7 world and need to be fixed. + # If we've stopped using this function, fixing it might enable us to re-enable + # it again and catch more errors. + case "$1" in + /etc/X11/xkb/compiled) echo /var/lib/xkb ;; + /etc/X11/xkb/xkbcomp) echo /usr/X11R6/bin/xkbcomp ;; + /usr/X11R6/lib/X11/app-defaults) echo /etc/X11/app-defaults ;; + /usr/X11R6/lib/X11/fs) echo /etc/X11/fs ;; + /usr/X11R6/lib/X11/lbxproxy) echo /etc/X11/lbxproxy ;; + /usr/X11R6/lib/X11/proxymngr) echo /etc/X11/proxymngr ;; + /usr/X11R6/lib/X11/rstart) echo /etc/X11/rstart ;; + /usr/X11R6/lib/X11/twm) echo /etc/X11/twm ;; + /usr/X11R6/lib/X11/xdm) echo /etc/X11/xdm ;; + /usr/X11R6/lib/X11/xinit) echo /etc/X11/xinit ;; + /usr/X11R6/lib/X11/xkb) echo /etc/X11/xkb ;; + /usr/X11R6/lib/X11/xserver) echo /etc/X11/xserver ;; + /usr/X11R6/lib/X11/xsm) echo /etc/X11/xsm ;; + /usr/bin/X11) echo ../X11R6/bin ;; + /usr/bin/rstartd) echo ../X11R6/bin/rstartd ;; + /usr/include/X11) echo ../X11R6/include/X11 ;; + /usr/lib/X11) echo ../X11R6/lib/X11 ;; + *) internal_error "maplink() called with unknown path \"$1\"" ;; + esac +} + +analyze_path () { + # given a supplied set of pathnames, break each one up by directory and do an + # ls -dl on each component, cumulatively; i.e. + # analyze_path /usr/X11R6/bin -> ls -dl /usr /usr/X11R6 /usr/X11R6/bin + # Thanks to Randolph Chung for this clever hack. + + local f g + + while [ -n "$1" ]; do + reject_whitespace "$1" + g= + message "Analyzing $1:" + for f in $(echo "$1" | tr / \ ); do + if [ -e /$g$f ]; then + ls -dl /$g$f /$g$f.dpkg-* 2> /dev/null || true + g=$g$f/ + else + message "/$g$f: nonexistent; directory contents of /$g:" + ls -l /$g + break + fi + done + shift + done +} + +find_culprits () { + local f p dpkg_info_dir possible_culprits smoking_guns bad_packages package \ + msg + + reject_whitespace "$1" + message "Searching for overlapping packages..." + dpkg_info_dir=/var/lib/dpkg/info + if [ -d $dpkg_info_dir ]; then + if [ "$(echo $dpkg_info_dir/*.list)" != "$dpkg_info_dir/*.list" ]; then + possible_culprits=$(ls -1 $dpkg_info_dir/*.list | egrep -v \ + "(xbase-clients|x11-common|xfs|xlibs)") + if [ -n "$possible_culprits" ]; then + smoking_guns=$(grep -l "$1" $possible_culprits || true) + if [ -n "$smoking_guns" ]; then + bad_packages=$(printf "\\n") + for f in $smoking_guns; do + # too bad you can't nest parameter expansion voodoo + p=${f%*.list} # strip off the trailing ".list" + package=${p##*/} # strip off the directories + bad_packages=$(printf "%s\n%s" "$bad_packages" "$package") + done + msg=$(cat < /dev/null 2>&1; then + shortcmd=${cmd##*/} + observe "running $shortcmd in $dir font directory" + cmd_opts= + if [ "$shortcmd" = "update-fonts-alias" ]; then + cmd_opts=--x11r7-layout + fi + if [ "$shortcmd" = "update-fonts-dir" ]; then + cmd_opts=--x11r7-layout + fi + if [ "$shortcmd" = "update-fonts-scale" ]; then + cmd_opts=--x11r7-layout + fi + $cmd $cmd_opts $dir || warn "$cmd $cmd_opts $dir" \ + "failed; font directory data may not" \ + "be up to date" + else + warn "$cmd not found; not updating corresponding $dir font" \ + "directory data" + fi + done + else + warn "$dir is not a directory; not updating font directory data" + fi + done +} + +remove_conffile_prepare () { + # syntax: remove_conffile_prepare filename official_md5sum ... + # + # Check a conffile "filename" against a list of canonical MD5 checksums. + # If the file's current MD5 checksum matches one of the "official_md5sum" + # operands provided, then prepare the conffile for removal from the system. + # We defer actual deletion until the package is configured so that we can + # roll this operation back if package installation fails. + # + # Call this function from a preinst script in the event $1 is "upgrade" or + # "install" and verify $2 to ensure the package is being upgraded from a + # version (or installed over a version removed-but-not-purged) prior to the + # one in which the conffile was obsoleted. + + local conffile current_checksum + + # validate arguments + if [ $# -lt 2 ]; then + usage_error "remove_conffile_prepare() called with wrong number of" \ + "arguments; expected at least 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + conffile="$1" + shift + + # does the conffile even exist? + if [ -e "$conffile" ]; then + # calculate its checksum + current_checksum=$(md5sum < "$conffile" | sed 's/[[:space:]].*//') + # compare it to each supplied checksum + while [ -n "$1" ]; do + if [ "$current_checksum" = "$1" ]; then + # we found a match; move the confffile and stop looking + observe "preparing obsolete conffile $conffile for removal" + mv "$conffile" "$conffile.$THIS_PACKAGE-tmp" + break + fi + shift + done + fi +} + +remove_conffile_lookup () { + # syntax: remove_conffile_lookup package filename + # + # Lookup the md5sum of a conffile in dpkg's database, and prepare for removal + # if it matches the actual file's md5sum. + # + # Call this function when you would call remove_conffile_prepare but only + # want to check against dpkg's status database instead of known checksums. + + local package conffile old_md5sum + + # validate arguments + if [ $# -ne 2 ]; then + usage_error "remove_conffile_lookup() called with wrong number of" \ + "arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + package="$1" + conffile="$2" + + if ! [ -e "$conffile" ]; then + return + fi + old_md5sum="$(dpkg-query -W -f='${Conffiles}' "$package" | \ + awk '{ if (match($0, "^ '"$conffile"' ")) print $2}')" + if [ -n "$old_md5sum" ]; then + remove_conffile_prepare "$conffile" "$old_md5sum" + fi +} + +remove_conffile_commit () { + # syntax: remove_conffile_commit filename + # + # Complete the removal of a conffile "filename" that has become obsolete. + # + # Call this function from a postinst script after having used + # remove_conffile_prepare() in the preinst. + + local conffile + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "remove_conffile_commit() called with wrong number of" \ + "arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + conffile="$1" + + # if the temporary file created by remove_conffile_prepare() exists, remove it + if [ -e "$conffile.$THIS_PACKAGE-tmp" ]; then + observe "committing removal of obsolete conffile $conffile" + rm "$conffile.$THIS_PACKAGE-tmp" + fi +} + +remove_conffile_rollback () { + # syntax: remove_conffile_rollback filename + # + # Roll back the removal of a conffile "filename". + # + # Call this function from a postrm script in the event $1 is "abort-upgrade" + # or "abort-install" is after having used remove_conffile_prepare() in the + # preinst. + + local conffile + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "remove_conffile_rollback() called with wrong number of" \ + "arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + conffile="$1" + + # if the temporary file created by remove_conffile_prepare() exists, move it + # back + if [ -e "$conffile.$THIS_PACKAGE-tmp" ]; then + observe "rolling back removal of obsolete conffile $conffile" + mv "$conffile.$THIS_PACKAGE-tmp" "$conffile" + fi +} + +replace_conffile_with_symlink_prepare () { + # syntax: replace_conffile_with_symlink_prepare oldfilename newfilename \ + # official_md5sum ... + # + # Check a conffile "oldfilename" against a list of canonical MD5 checksums. + # If the file's current MD5 checksum matches one of the "official_md5sum" + # operands provided, then prepare the conffile for removal from the system. + # We defer actual deletion until the package is configured so that we can + # roll this operation back if package installation fails. Otherwise copy it + # to newfilename and let dpkg handle it through conffiles mechanism. + # + # Call this function from a preinst script in the event $1 is "upgrade" or + # "install" and verify $2 to ensure the package is being upgraded from a + # version (or installed over a version removed-but-not-purged) prior to the + # one in which the conffile was obsoleted. + + local conffile current_checksum + + # validate arguments + if [ $# -lt 3 ]; then + usage_error "replace_conffile_with_symlink_prepare() called with wrong" \ + " number of arguments; expected at least 3, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + oldconffile="$1" + shift + newconffile="$1" + shift + + remove_conffile_prepare "$_oldconffile" "$@" + # If $oldconffile still exists, then md5sums didn't match. + # Copy it to new one. + if [ -f "$oldconffile" ]; then + cp "$oldconffile" "$newconffile" + fi + +} + +replace_conffile_with_symlink_commit () { + # syntax: replace_conffile_with_symlink_commit oldfilename + # + # Complete the removal of a conffile "oldfilename" that has been + # replaced by a symlink. + # + # Call this function from a postinst script after having used + # replace_conffile_with_symlink_prepare() in the preinst. + + local conffile + + # validate arguments + if [ $# -ne 1 ]; then + usage_error "replace_conffile_with_symlink_commit() called with wrong" \ + "number of arguments; expected 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + conffile="$1" + + remove_conffile_commit "$conffile" +} + +replace_conffile_with_symlink_rollback () { + # syntax: replace_conffile_with_symlink_rollback oldfilename newfilename + # + # Roll back the replacing of a conffile "oldfilename" with symlink to + # "newfilename". + # + # Call this function from a postrm script in the event $1 is "abort-upgrade" + # or "abort-install" and verify $2 to ensure the package failed to upgrade + # from a version (or install over a version removed-but-not-purged) prior + # to the one in which the conffile was obsoleted. + # You should have used replace_conffile_with_symlink_prepare() in the + # preinst. + + local conffile + + # validate arguments + if [ $# -ne 2 ]; then + usage_error "replace_conffile_with_symlink_rollback() called with wrong" \ + "number of arguments; expected 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + oldconffile="$1" + newconffile="$2" + + remove_conffile_rollback "$_oldconffile" + if [ -f "$newconffile" ]; then + rm "$newconffile" + fi +} + +run () { + # syntax: run command [ argument ... ] + # + # Run specified command with optional arguments and report its exit status. + # Useful for commands whose exit status may be nonzero, but still acceptable, + # or commands whose failure is not fatal to us. + # + # NOTE: Do *not* use this function with db_get or db_metaget commands; in + # those cases the return value of the debconf command *must* be checked + # before the string returned by debconf is used for anything. + + local retval + + # validate arguments + if [ $# -lt 1 ]; then + usage_error "run() called with wrong number of arguments; expected at" \ + "least 1, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + "$@" || retval=$? + + if [ ${retval:-0} -ne 0 ]; then + observe "command \"$*\" exited with status $retval" + fi +} + +make_symlink_sane () { + # syntax: make_symlink_sane symlink target + # + # Ensure that the symbolic link symlink exists, and points to target. + # + # If symlink does not exist, create it and point it at target. + # + # If symlink exists but is not a symbolic link, back it up. + # + # If symlink exists, is a symbolic link, but points to the wrong location, fix + # it. + # + # If symlink exists, is a symbolic link, and already points to target, do + # nothing. + # + # This function wouldn't be needed if ln had an -I, --idempotent option. + + # Validate arguments. + if [ $# -ne 2 ]; then + usage_error "make_symlink_sane() called with wrong number of arguments;" \ + "expected 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + # We could just use the positional parameters as-is, but that makes things + # harder to follow. + local symlink target + + symlink="$1" + target="$2" + + if [ -L "$symlink" ] && [ "$(readlink "$symlink")" = "$target" ]; then + observe "link from $symlink to $target already exists" + else + observe "creating symbolic link from $symlink to $target" + mkdir -p "${target%/*}" "${symlink%/*}" + ln -s -b -S ".dpkg-old" "$target" "$symlink" + fi +} + +migrate_dir_to_symlink () { + # syntax: migrate_dir_to_symlink old_location new_location + # + # Per Debian Policy section 6.5.4, "A directory will never be replaced by a + # symbolic link to a directory or vice versa; instead, the existing state + # (symlink or not) will be left alone and dpkg will follow the symlink if + # there is one." + # + # We have to do it ourselves. + # + # This function moves the contents of old_location, a directory, into + # new_location, a directory, then makes old_location a symbolic link to + # new_location. + # + # old_location need not exist, but if it does, it must be a directory (or a + # symlink to a directory). If it is not, it is backed up. If new_location + # exists already and is not a directory, it is backed up. + # + # This function should be called from a package's preinst so that other + # packages unpacked after this one --- but before this package's postinst runs + # --- are unpacked into new_location even if their payloads contain + # old_location filespecs. + + # Validate arguments. + if [ $# -ne 2 ]; then + usage_error "migrate_dir_to_symlink() called with wrong number of" + "arguments; expected 2, got $#" + exit $SHELL_LIB_USAGE_ERROR + fi + + # We could just use the positional parameters as-is, but that makes things + # harder to follow. + local new old + + old="$1" + new="$2" + + # Is old location a symlink? + if [ -L "$old" ]; then + # Does it already point to new location? + if [ "$(readlink "$old")" = "$new" ]; then + # Nothing to do; migration has already been done. + observe "migration of $old to $new already done" + return 0 + else + # Back it up. + warn "backing up symbolic link $old as $old.dpkg-old" + mv -b "$old" "$old.dpkg-old" + fi + fi + + # Does old location exist, but is not a directory? + if [ -e "$old" ] && ! [ -d "$old" ]; then + # Back it up. + warn "backing up non-directory $old as $old.dpkg-old" + mv -b "$old" "$old.dpkg-old" + fi + + observe "migrating $old to $new" + + # Is new location a symlink? + if [ -L "$new" ]; then + # Does it point the wrong way, i.e., back to where we're migrating from? + if [ "$(readlink "$new")" = "$old" ]; then + # Get rid of it. + observe "removing symbolic link $new which points to $old" + rm "$new" + else + # Back it up. + warn "backing up symbolic link $new as $new.dpkg-old" + mv -b "$new" "$new.dpkg-old" + fi + fi + + # Does new location exist, but is not a directory? + if [ -e "$new" ] && ! [ -d "$new" ]; then + warn "backing up non-directory $new as $new.dpkg-old" + mv -b "$new" "$new.dpkg-old" + fi + + # Create new directory if it does not yet exist. + if ! [ -e "$new" ]; then + observe "creating $new" + mkdir -p "$new" + fi + + # Copy files in old location to new location. Back up any filenames that + # already exist in the new location with the extension ".dpkg-old". + observe "copying files from $old to $new" + if ! (cd "$old" && cp -a -b -S ".dpkg-old" . "$new"); then + die "error(s) encountered while copying files from $old to $new" + fi + + # Remove files at old location. + observe "removing $old" + rm -r "$old" + + # Create symlink from old location to new location. + make_symlink_sane "$old" "$new" +} + +# vim:set ai et sw=2 ts=2 tw=80: + +# GOBSTOPPER: The X Strike Force shell library ends here. --- xfs-1.0.8.orig/debian/xsfbs/repack.sh +++ xfs-1.0.8/debian/xsfbs/repack.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +set -e + +if ! [ -d debian/prune ]; then + exit 0 +fi + +if [ "x$1" != x--upstream-version ]; then + exit 1 +fi + +version="$2" +filename="$3" + +if [ -z "$version" ] || ! [ -f "$filename" ]; then + exit 1 +fi + +dir="$(pwd)" +tempdir="$(mktemp -d)" + +cd "$tempdir" +tar xf "$dir/$filename" +cat "$dir"/debian/prune/* | while read file; do rm -f */$file; done + +tar czf "$dir/$filename" * +cd "$dir" +rm -rf "$tempdir" +echo "Done pruning upstream tarball" + +exit 0