Hi, After looking over cups-daemon's preinst script which generates the cupsd-systemd-listen.conf file, I think I found the problem(s):
1 #!/bin/sh 2 3 set -e 4 5 6 case "$1" in 7 install|upgrade) 8 if dpkg --compare-versions "$2" le "1.6.1" && [ -e /etc/cups/cupsd.conf ]; then 9 # Move cupsd.conf away as it becomes a non-conffile 10 mv /etc/cups/cupsd.conf /etc/cups/cupsd.conf.conffile-bak 11 fi 12 13 # If file doesn't exist or if it has two conflicting stanzas 14 if [ ! -f /etc/cups/cupsd-systemd-listen.conf ] || \ 15 ( grep -q '^ListenStream=0.0.0.0:' /etc/cups/cupsd-systemd-listen.conf 2>/dev/null && \ 16 grep -q '^ListenStream=127.0.0.1:' /etc/cups/cupsd-systemd-listen.conf 2>/dev/null ) ;\ 17 then This is problem #1. This means that /etc/cups/cupsd-systemd-listen.conf will not regenerated if it already exists unless there are conflicting stanzas. While this is generally a good idea for configuration files, it also means that an incorrect file will never be corrected. 18 mkdir -p /etc/cups 19 cat >/etc/cups/cupsd-systemd-listen.conf <<EOF 20 [Socket] 21 # This file was generated by CUPS and _WILL_ be deleted or overwritten by it! 22 # It has to be kept in sync with the Port and Listen stanzas in /etc/cups/cupsd.conf 23 # It is by default symlinked as cups-listen.conf in the 24 # /etc/systemd/system/cups.socket.d/ directory. Remove the symlink 25 # and write your own file there if you don't want this. See systemd.socket(5). 26 EOF 27 if [ -e /etc/cups/cupsd.conf ]; then This is problem #2. This means, that the /etc/cups/cupsd.conf file will only be parsed if it exists. However, this is the *pre*inst script, meaning that this check will always fail on new installations since the package isn't unpacked yet when this runs. [0] 28 if grep -q '^\s*Port' /etc/cups/cupsd.conf 2>/dev/null; then 29 localport=`grep '^\s*Port' /etc/cups/cupsd.conf | head -n1 | sed -e 's/.*Port \([[:digit:]]*\)$/\1/'` 30 cat >>/etc/cups/cupsd-systemd-listen.conf <<EOF 31 # Matches 'Port $localport' from cupsd.conf 32 ListenStream=0.0.0.0:$localport 33 ListenStream=[::]:$localport 34 EOF 35 elif grep -q '^\s*Listen localhost:' /etc/cups/cupsd.conf 2>/dev/null; then 36 localport=`grep '^\s*Listen localhost:' /etc/cups/cupsd.conf | head -n1 | sed -e 's/.*localhost\:\([[:digit:]]*\)$/\1/'` 37 cat >>/etc/cups/cupsd-systemd-listen.conf <<EOF 38 # Matches 'Listen localhost:$localport' from cupsd.conf 39 ListenStream=127.0.0.1:$localport 40 ListenStream=[::1]:$localport 41 EOF 42 fi 43 else 44 cat >>/etc/cups/cupsd-systemd-listen.conf <<EOF 45 # Matches the default 'Listen localhost:631' from cupsd.conf.default 46 ListenStream=0.0.0.0:631 47 ListenStream=[::]:631 This is problem #3. This means that CUPS will listen on all interfaces even though the comment directly above says exactly the opposite. This looks a lot like a simple typo. 48 EOF 49 fi 50 fi 51 esac 52 53 # Automatically added by dh_installdeb 54 dpkg-maintscript-helper rm_conffile /etc/cups/cupsd.conf.default 1.7.1-3~ -- "$@" 55 # End automatically added section 56 # Automatically added by dh_installdeb 57 dpkg-maintscript-helper rm_conffile /etc/default/cups 1.7.1-6~ -- "$@" 58 # End automatically added section 59 # Automatically added by dh_installdeb 60 dpkg-maintscript-helper mv_conffile /etc/pam.d/cups-daemon /etc/pam.d/cups 1.7.3-2~ -- "$@" 61 # End automatically added section 62 63 64 exit 0 The result is, that because of problem #2, /etc/cups/cupsd.conf will never actually be parsed on new installations. Instead the incorrect fallback configuration will be used (problem #3). And because of problem #1, this will never be corrected, even when the package is updated or reinstalled. Best regards Alexander Kurtz [0] http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html
signature.asc
Description: This is a digitally signed message part