> I have been listening on the sideline, and really appreciate the good
> input on this.
great :)
> Have been too busy with real life to dig into the problem myself, but
> will appreciate a patch and package it.
well, then a patch is attached.
it is a patch against the tree built by the current state of :
apt-get source uw-imapd/unstable
the patch is inspired by dato's work, and create
{uw-imapd,ipopd}.{postrm,preinst,postinst} from templates.
the patch is presented as an NMU, so you will have to change the
debian/changelog entry and put your name in there ;)
cheers,
--
�O� Pierre Habouzit
��O
OOO http://www.madism.org
diff -ruN uw-imap-2002edebian1/debian/changelog
uw-imap-2002edebian1.new/debian/changelog
--- uw-imap-2002edebian1/debian/changelog 2005-02-26 18:13:55.249980232
+0100
+++ uw-imap-2002edebian1.new/debian/changelog 2005-02-26 18:18:54.796505956
+0100
@@ -1,3 +1,10 @@
+uw-imap (7:2002edebian1-6.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Handle inetd.conf correctly (closes: #295306).
+
+ -- Pierre Habouzit <[EMAIL PROTECTED]> Sat, 26 Feb 2005 18:18:08 +0100
+
uw-imap (7:2002edebian1-6) unstable; urgency=high
* Fix CERT security bug VU#702777: CRAM-MD5 authentication (disabled
diff -ruN uw-imap-2002edebian1/debian/ipopd.postinst
uw-imap-2002edebian1.new/debian/ipopd.postinst
--- uw-imap-2002edebian1/debian/ipopd.postinst 2005-02-26 18:13:55.251980049
+0100
+++ uw-imap-2002edebian1.new/debian/ipopd.postinst 1970-01-01
01:00:00.000000000 +0100
@@ -1,47 +0,0 @@
-#!/bin/sh
-
-set -e
-
-# Source debconf library.
-. /usr/share/debconf/confmodule
-db_version 2.0
-
-db_get ipopd/protocol
-for i in `echo "$RET" | sed 's/,/ /g'`; do
-
- if [ "$i" = "pop2" ]; then
- update-inetd --group mail --add "pop2 stream tcp nowait
root /usr/sbin/tcpd /usr/sbin/ipop2d"
- elif [ "$i" = "pop3" ]; then
- update-inetd --group mail --add "pop3 stream tcp nowait
root /usr/sbin/tcpd /usr/sbin/ipop3d"
- elif [ "$i" = "pop3s" ]; then
- update-inetd --group mail --add "pop3s stream tcp nowait
root /usr/sbin/tcpd /usr/sbin/ipop3d"
- fi
-done
-
-cd /etc/ssl/certs
-PATH=$PATH:/usr/bin/ssl
-if [ -f ipop3d.pem ]; then
- echo "You already have /etc/ssl/certs/ipop3d.pem"
-else
- echo "Creating generic self-signed certificate:
/etc/ssl/certs/ipop3d.pem"
- echo "(replace with hand-crafted or authorized one if needed)."
- HOSTNAME=`hostname -s`
- FQDN=`hostname -f`
- MAILNAME=`cat /etc/mailname 2> /dev/null || hostname -f`
- openssl req -new -x509 -days 365 -nodes -out ipop3d.pem -keyout
ipop3d.pem > /dev/null 2>&1 <<+
-.
-.
-.
-University of Washington POP3 daemon
-$HOSTNAME
-$FQDN
[EMAIL PROTECTED]
-+
- ln -sf ipop3d.pem `openssl x509 -noout -hash < ipop3d.pem`.0
- chown root.root /etc/ssl/certs/ipop3d.pem
- chmod 0640 /etc/ssl/certs/ipop3d.pem
-fi
-
-#DEBHELPER#
-
-exit 0
diff -ruN uw-imap-2002edebian1/debian/ipopd.postrm
uw-imap-2002edebian1.new/debian/ipopd.postrm
--- uw-imap-2002edebian1/debian/ipopd.postrm 2005-02-26 18:13:55.249980232
+0100
+++ uw-imap-2002edebian1.new/debian/ipopd.postrm 1970-01-01
01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-#!/bin/sh
-
-set -e
-
-# Source debconf library.
-. /usr/share/debconf/confmodule
-db_version 2.0
-
-##
-## Remove POP daemons from inetd.conf
-##
-db_get ipopd/protocol
-for i in `echo "$RET" | sed 's/,/ /g'`; do
- if [ "$i" = "pop2" ]; then
- update-inetd --remove pop2;
- elif [ "$i" = "pop3" ]; then
- update-inetd --remove pop3;
- elif [ "$i" = "pop3s" ]; then
- update-inetd --remove pop3s;
- fi
-done
-
-if [ "$1" = "purge" -a -f /etc/ssl/certs/ipop3d.pem ]; then
-# cd /etc/ssl/certs
-# PATH=$PATH:/usr/bin/ssl
-# rm -f `openssl x509 -noout -hash < ipop3d.pem`.0 || true
-# if [ -f ipop3d.pem ]; then rm -f ipop3d.pem; fi
- echo "SSL certificate /etc/ssl/certs/ipop3d.pem is NOT removed."
- echo "Please remove the file manually."
-fi
-
-#DEBHELPER#
-
-exit 0
diff -ruN uw-imap-2002edebian1/debian/rules
uw-imap-2002edebian1.new/debian/rules
--- uw-imap-2002edebian1/debian/rules 2005-02-26 18:13:55.292976293 +0100
+++ uw-imap-2002edebian1.new/debian/rules 2005-02-26 18:16:56.248395537
+0100
@@ -49,6 +49,11 @@
echo "Upstream version has changed (or debian/control.in is out
of sync)"; \
echo "Please do a 'debian/rules update-control' or edit
manually..."; \
exit 1)
+ for i in uw-imapd ipopd; do
\
+ for f in preinst postinst postrm; do
\
+ sed -e "s/@@PROGRAM@@/$$i/" debian/uw/$$f >
debian/$$i.$$f; \
+ done;
\
+ done
build: build-stamp
build-stamp: debian/stamp-patched
@@ -78,6 +83,11 @@
eval targetfile=`echo $$file | sed $(SEDRULE_FILENAME)`; \
rm -f $$targetfile; \
done
+ for i in uw-imapd ipopd; do \
+ for f in preinst postinst postrm; do \
+ rm -f debian/$$i.$$f; \
+ done; \
+ done
pre-build::
for file in `find debian -type f -name '*.in' -not -name control.in
-not -name POTFILES.in`; do \
diff -ruN uw-imap-2002edebian1/debian/uw/postinst
uw-imap-2002edebian1.new/debian/uw/postinst
--- uw-imap-2002edebian1/debian/uw/postinst 1970-01-01 01:00:00.000000000
+0100
+++ uw-imap-2002edebian1.new/debian/uw/postinst 2005-02-26 18:09:21.368077234
+0100
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+set -e
+
+PROGRAM=@@PROGRAM@@
+
+# Source debconf library.
+. /usr/share/debconf/confmodule
+db_version 2.0
+
+if [ "$1" = "configure" ]; then
+ if [ -z "$2" ]; then
+ UPDATE_INETD_ARG='--group mail --add'
+ UPDATE_INETD_ARG_EXTRA=" stream tcp nowait root
/usr/sbin/tcpd /usr/sbin/imapd"
+ else
+ UPDATE_INETD_ARG='--enable'
+
+ # Bug#295306
+ if dpkg --compare-versions "$2" le 7:2002edebian1-6
+ then
+ MY_FILE=/var/cache/${PROGRAM}_inetd.conf_copy
+ if [ -r "$MY_FILE" ]; then
+ while read line; do
+ update-inetd --group mail --add "$line"
+ done < "$MY_FILE"
+ rm -f "$MY_FILE"
+ else
+ # The file has disappeared, or we're installing from
+ # 'config files' state. Install default entries.
+ UPDATE_INETD_ARG='--group mail --add'
+ UPDATE_INETD_ARG_EXTRA=" stream tcp nowait root
/usr/sbin/tcpd /usr/sbin/imapd"
+ fi
+ fi
+ fi
+
+ db_get uw-imapd/protocol
+ for i in `echo "$RET" | sed 's/,/ /g'`; do
+ case "$i" in
+ imap2|imap3|imaps)
+ update-inetd $UPDATE_INETD_ARG "${i}${UPDATE_INETD_ARG_EXTRA}"
+ ;;
+ esac
+ done
+fi
+
+cd /etc/ssl/certs
+PATH=$PATH:/usr/bin/ssl
+if [ -f imapd.pem ]; then
+ echo "You already have /etc/ssl/certs/imapd.pem"
+else
+ echo "Creating generic self-signed certificate:
/etc/ssl/certs/imapd.pem"
+ echo "(replace with hand-crafted or authorized one if needed)."
+ HOSTNAME=`hostname -s`
+ FQDN=`hostname -f`
+ MAILNAME=`cat /etc/mailname 2> /dev/null || hostname -f`
+ openssl req -new -x509 -days 365 -nodes -out imapd.pem -keyout
imapd.pem > /dev/null 2>&1 <<+
+.
+.
+.
+University of Washington IMAP daemon
+$HOSTNAME
+$FQDN
[EMAIL PROTECTED]
++
+ ln -sf imapd.pem `openssl x509 -noout -hash < imapd.pem`.0
+ chown root.root /etc/ssl/certs/imapd.pem
+ chmod 0640 /etc/ssl/certs/imapd.pem
+fi
+
+#DEBHELPER#
+
+exit 0
diff -ruN uw-imap-2002edebian1/debian/uw/postrm
uw-imap-2002edebian1.new/debian/uw/postrm
--- uw-imap-2002edebian1/debian/uw/postrm 1970-01-01 01:00:00.000000000
+0100
+++ uw-imap-2002edebian1.new/debian/uw/postrm 2005-02-26 17:45:14.548607725
+0100
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+set -e
+
+# Source debconf library.
+. /usr/share/debconf/confmodule
+db_version 2.0
+
+##
+## Remove imapd from inetd.conf
+##
+
+if [ "$1" = "purge" ]; then
+ UPDATE_INETD_ARG='--remove'
+else
+ # Note that we disable in upgrades too
+ UPDATE_INETD_ARG='--disable'
+fi
+
+db_get uw-imapd/protocol
+for i in `echo "$RET" | sed 's/,/ /g'`; do
+ case "$i" in
+ imap2|imap3|imaps)
+ update-inetd $UPDATE_INETD_ARG $i
+ ;;
+ esac
+done
+
+if [ "$1" = "purge" -a -f /etc/ssl/certs/imapd.pem ]; then
+ echo "SSL certificate /etc/ssl/certs/imapd.pem is NOT removed."
+ echo "Please remove manually if required."
+# cd /etc/ssl/certs
+# PATH=$PATH:/usr/bin/ssl
+# rm -f `openssl x509 -noout -hash < imapd.pem`.0 || true
+# if [ -f imapd.pem ]; then rm -f imapd.pem; fi
+fi
+
+#DEBHELPER#
+
+exit 0
diff -ruN uw-imap-2002edebian1/debian/uw/preinst
uw-imap-2002edebian1.new/debian/uw/preinst
--- uw-imap-2002edebian1/debian/uw/preinst 1970-01-01 01:00:00.000000000
+0100
+++ uw-imap-2002edebian1.new/debian/uw/preinst 2005-02-26 18:10:50.291928297
+0100
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+set -e
+
+PROGRAM=@@PROGRAM@@
+
+MY_FILE=/var/cache/${PROGRAM}_inetd.conf_copy
+
+if [ "$1" = "upgrade" ] && dpkg --compare-versions "$2" le 7:2002edebian1-6
+then
+ # See Bug#295306: the postrm that will be called after unpacking
+ # will remove entries from /etc/inetd.conf, so we save them for
+ # restoring them in the postinst.
+ grep -E "^([# ]+|#<off># +)?imap[23s]" /etc/inetd.conf >>"$MY_FILE"
+fi
+
diff -ruN uw-imap-2002edebian1/debian/uw-imapd.postinst
uw-imap-2002edebian1.new/debian/uw-imapd.postinst
--- uw-imap-2002edebian1/debian/uw-imapd.postinst 2005-02-26
18:13:55.275977850 +0100
+++ uw-imap-2002edebian1.new/debian/uw-imapd.postinst 1970-01-01
01:00:00.000000000 +0100
@@ -1,46 +0,0 @@
-#!/bin/sh
-
-set -e
-
-# Source debconf library.
-. /usr/share/debconf/confmodule
-db_version 2.0
-
-db_get uw-imapd/protocol
-for i in `echo "$RET" | sed 's/,/ /g'`; do
- if [ "$i" = "imap2" ]; then
- update-inetd --group mail --add "imap2 stream tcp nowait
root /usr/sbin/tcpd /usr/sbin/imapd";
- elif [ "$i" = "imap3" ]; then
- update-inetd --group mail --add "imap3 stream tcp nowait
root /usr/sbin/tcpd /usr/sbin/imapd";
- elif [ "$i" = "imaps" ]; then
- update-inetd --group mail --add "imaps stream tcp nowait
root /usr/sbin/tcpd /usr/sbin/imapd";
- fi
-done
-
-cd /etc/ssl/certs
-PATH=$PATH:/usr/bin/ssl
-if [ -f imapd.pem ]; then
- echo "You already have /etc/ssl/certs/imapd.pem"
-else
- echo "Creating generic self-signed certificate:
/etc/ssl/certs/imapd.pem"
- echo "(replace with hand-crafted or authorized one if needed)."
- HOSTNAME=`hostname -s`
- FQDN=`hostname -f`
- MAILNAME=`cat /etc/mailname 2> /dev/null || hostname -f`
- openssl req -new -x509 -days 365 -nodes -out imapd.pem -keyout
imapd.pem > /dev/null 2>&1 <<+
-.
-.
-.
-University of Washington IMAP daemon
-$HOSTNAME
-$FQDN
[EMAIL PROTECTED]
-+
- ln -sf imapd.pem `openssl x509 -noout -hash < imapd.pem`.0
- chown root.root /etc/ssl/certs/imapd.pem
- chmod 0640 /etc/ssl/certs/imapd.pem
-fi
-
-#DEBHELPER#
-
-exit 0
diff -ruN uw-imap-2002edebian1/debian/uw-imapd.postrm
uw-imap-2002edebian1.new/debian/uw-imapd.postrm
--- uw-imap-2002edebian1/debian/uw-imapd.postrm 2005-02-26 18:13:55.286976843
+0100
+++ uw-imap-2002edebian1.new/debian/uw-imapd.postrm 1970-01-01
01:00:00.000000000 +0100
@@ -1,35 +0,0 @@
-#!/bin/sh
-
-set -e
-
-# Source debconf library.
-. /usr/share/debconf/confmodule
-db_version 2.0
-
-##
-## Remove imapd from inetd.conf
-##
-
-db_get uw-imapd/protocol
-for i in `echo "$RET" | sed 's/,/ /g'`; do
- if [ "$i" = "imap2" ]; then
- update-inetd --remove imap2;
- elif [ "$i" = "imap3" ]; then
- update-inetd --remove imap3;
- elif [ "$i" = "imaps" ]; then
- update-inetd --remove imaps;
- fi
-done
-
-if [ "$1" = "purge" -a -f /etc/ssl/certs/imapd.pem ]; then
- echo "SSL certificate /etc/ssl/certs/imapd.pem is NOT removed."
- echo "Please remove manually if required."
-# cd /etc/ssl/certs
-# PATH=$PATH:/usr/bin/ssl
-# rm -f `openssl x509 -noout -hash < imapd.pem`.0 || true
-# if [ -f imapd.pem ]; then rm -f imapd.pem; fi
-fi
-
-#DEBHELPER#
-
-exit 0