On Mon, Jan 19, 2009 at 12:12:25AM +0100, José Luis Tallón wrote:
> Christian Hammers wrote:
> > Hello
> >
> > Any progress with this Release Critical bug?
> >   
> Ready to be uploaded, at:
> 
> http://devel.adv-solutions.net/debian/pool/main/mail/imapproxy/up-imapproxy_1.2.6-5.dsc

That still unconditionally overwrites local changes to listen_port,
proc_username etc.

> Thank you to Niko Tyni and other contributors.

Please note that the patch wasn't written by me but by Andreas Henriksson.

The attached new patch seems to work for me, but please verify. It uses ucf
for config file handling, which simplifies things IMO.

I'm not uploading an NMU for now, and I think #512369 should be fixed too.

I'd suggest making at least listen_port debconf-configurable for lenny+1.
-- 
Niko Tyni   nt...@debian.org
diff -u up-imapproxy-1.2.6/debian/control up-imapproxy-1.2.6/debian/control
--- up-imapproxy-1.2.6/debian/control
+++ up-imapproxy-1.2.6/debian/control
@@ -9,7 +9,7 @@
 
 Package: imapproxy
 Architecture: any
-Depends: lsb-base, ${shlibs:Depends}, ${misc:Depends}
+Depends: lsb-base, ${shlibs:Depends}, ${misc:Depends}, ucf (>= 0.28)
 Description: IMAP protocol proxy
  UP-ImapProxy proxies IMAP transactions between an IMAP client and an IMAP
  server. The general idea is that the client should never know that it is
diff -u up-imapproxy-1.2.6/debian/rules up-imapproxy-1.2.6/debian/rules
--- up-imapproxy-1.2.6/debian/rules
+++ up-imapproxy-1.2.6/debian/rules
@@ -67,6 +67,10 @@
 	mv debian/imapproxy/usr/sbin/in.imapproxyd \
 		debian/imapproxy/usr/sbin/imapproxyd
 
+	# prepare the default configuration file
+	perl debian/prepare-config-file < scripts/imapproxy.conf \
+       > debian/imapproxy/usr/share/imapproxy/imapproxy.conf.default
+
 	dh_installexamples
 	chmod 644 $(CURDIR)/debian/imapproxy/usr/share/doc/imapproxy/examples/imapproxy.conf
 
diff -u up-imapproxy-1.2.6/debian/changelog up-imapproxy-1.2.6/debian/changelog
--- up-imapproxy-1.2.6/debian/changelog
+++ up-imapproxy-1.2.6/debian/changelog
@@ -1,3 +1,11 @@
+up-imapproxy (1.2.6-4.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Don't overwrite the config file on upgrades. (Closes: #510432)
+    + now depends on ucf (>= 0.28)
+
+ -- Niko Tyni <nt...@debian.org>  Mon, 19 Jan 2009 21:58:39 +0200
+
 up-imapproxy (1.2.6-4) unstable; urgency=medium
 
   * 'postinst' script: configuration file processing
diff -u up-imapproxy-1.2.6/debian/imapproxy.config up-imapproxy-1.2.6/debian/imapproxy.config
--- up-imapproxy-1.2.6/debian/imapproxy.config
+++ up-imapproxy-1.2.6/debian/imapproxy.config
@@ -12,9 +12,14 @@
 
 set -e
 
+CONFIG=/etc/imapproxy.conf
 
 case "$1" in
     configure|reconfigure)
+	if [ -f $CONFIG ]; then
+	    SERVER="$(perl -ne '/^\s*server_hostname\s*(\S+)$/ && print $1' $CONFIG)"
+	    [ -z "$SERVER" ] || db_set imapproxy/imap-server "$SERVER"
+	fi
 	db_input medium imapproxy/imap-server || true
 	db_go
     ;;
diff -u up-imapproxy-1.2.6/debian/imapproxy.dirs up-imapproxy-1.2.6/debian/imapproxy.dirs
--- up-imapproxy-1.2.6/debian/imapproxy.dirs
+++ up-imapproxy-1.2.6/debian/imapproxy.dirs
@@ -2,6 +2,7 @@
 etc/default
 usr/sbin
 var/lib/imapproxy/chroot
+usr/share/imapproxy
 usr/share/doc/imapproxy
 usr/share/doc/imapproxy/examples
 var/run
diff -u up-imapproxy-1.2.6/debian/imapproxy.postinst up-imapproxy-1.2.6/debian/imapproxy.postinst
--- up-imapproxy-1.2.6/debian/imapproxy.postinst
+++ up-imapproxy-1.2.6/debian/imapproxy.postinst
@@ -29,14 +29,7 @@
 #     `abort-remove' or `abort-deconfigure'.
 
 DESTFILE=/etc/imapproxy.conf
-CFGFILE=imapproxy.conf
-
-PARAMS="server_hostname proc_username proc_groupname chroot_directory listen_port"
-server_hostname="localhost"
-proc_username="nobody"
-proc_groupname="nogroup"
-chroot_directory="/var/lib/imapproxy/chroot"
-listen_port=143
+SRCFILE=/usr/share/imapproxy/imapproxy.conf.default
 
 case "$1" in
     configure)
@@ -48,31 +41,16 @@
 	if [ "$server_hostname" = "localhost" ]; then
 		# change bind port if localhost (#470431)
 		listen_port=1143;
+	else
+		listen_port=143
 	fi
 
-	test -f $DESTFILE || cp /usr/share/doc/imapproxy/examples/$CFGFILE $DESTFILE;
 	TMPFILE=`tempfile`
-	mv $DESTFILE $TMPFILE
-	export PARAMS
-	export $PARAMS
-
-/usr/bin/perl -- - $DESTFILE $TMPFILE << 'EOSCRIPT'
-use warnings;
-use strict;
-
-my $CFG;
-open(CFG, '>', shift) or die "imapproxy.postint: could not open: $!";
-
-my %params = map { $_ => undef } split(/\s/, $ENV{'PARAMS'});
-
-while (<>)
-{
-	my ($key) = m/^#?(\w+)/;
-	if ( defined $key and exists $params{$key} ) { print CFG "$key $ENV{$key}\n"; }
-	else { print CFG $_; }
-}
-
-EOSCRIPT
+	sed "s/^server_hostname .*/server_hostname ${server_hostname}/ ;
+	     s/^listen_port .*/listen_port ${listen_port}/" \
+	 < $SRCFILE > $TMPFILE
+	chmod 644 $TMPFILE
+	ucf --debconf-ok $TMPFILE $DESTFILE
 
 	# prevent incorrect time zone config (#436555)
 	if [ ! -f ${chroot_directory}/etc/localtime ]; then
@@ -80,14 +58,14 @@
 		cp /etc/localtime ${chroot_directory}/etc
 	fi
 
+	ucfr imapproxy $DESTFILE
 
-	# Clean env. & temp file
-	for p in $PARAMS PARAMS; do export $p= ; done
+	# Clean temp file
 	rm -f $TMPFILE
 	
 	else # -e /usr/share/debconf/confmodule
-	
-	  test -f $DESTFILE || cp /usr/share/doc/imapproxy/examples/$CFGFILE $DESTFILE;
+	  # this should never happen, really
+	  test -f $DESTFILE || cp $SRCFILE $DESTFILE;
 	  
 	fi
     ;;
diff -u up-imapproxy-1.2.6/debian/imapproxy.postrm up-imapproxy-1.2.6/debian/imapproxy.postrm
--- up-imapproxy-1.2.6/debian/imapproxy.postrm
+++ up-imapproxy-1.2.6/debian/imapproxy.postrm
@@ -22,6 +22,12 @@
         ;;
 	purge)
 		rm -f /etc/imapproxy.conf
+		if which ucf >/dev/null 2>&1; then
+			ucf --purge /etc/imapproxy.conf
+		fi
+		if which ucfr >/dev/null 2>&1; then
+			ucfr --purge imapproxy /etc/imapproxy.conf
+		fi
 	;;
 
     *)
only in patch2:
unchanged:
--- up-imapproxy-1.2.6.orig/debian/prepare-config-file
+++ up-imapproxy-1.2.6/debian/prepare-config-file
@@ -0,0 +1,17 @@
+#!/usr/bin/perl -w
+use strict;
+
+# server_hostname and server_port are handled by the postinst
+
+my %params=(
+    proc_username => "nobody",
+    proc_groupname => "nogroup",
+    chroot_directory => "/var/lib/imapproxy/chroot",
+);
+
+while (<>)
+{
+    my ($key) = m/^#?(\w+)/;
+    if ( defined $key and exists $params{$key} ) { print "$key $params{$key}\n"; }
+    else { print $_; }
+}

Reply via email to