Package: dovecot-core Version: 1:2.2.9-1 Severity: important Dear Maintainer,
We have a control panel which does a restart of dovecot after installation. The problem is that if we catch stderr output, our installer hangs. This problem occurs only in Jessie. This bug seem really similar to the one as described there: https://bugzilla.redhat.com/show_bug.cgi?id=730746 When we do not catch stderr output from the command which is responsible to restart dovecot, all goes fine. Piece of code from our installer to let you understand (written in perl): ### ... # /usr/sbin/service dovecot restart $rs = execute( "$main::imscpConfig{'SERVICE_MNGR'} $self->{'config'}->{'DOVECOT_SNAME'} restart", \$stdout, \stderr ); ... ### ### ... my $sel = IO::Select->new(); my $pid; if(defined $stdout && defined $stderr) { $pid = open3(gensym, \*CATCHOUT, \*CATCHERR, $command); $sel->add(\*CATCHOUT, \*CATCHERR); } elsif(defined $stdout) { $pid = open3(gensym, \*CATCHOUT, ">&STDERR", $command); $sel->add(\*CATCHOUT); } elsif(defined $stderr) { $pid = open3(gensym, ">&STDOUT", \*CATCHERR, $command); $sel->add(\*CATCHERR); } else { system($command); return getExitCode($?); } while (my @ready = $sel->can_read()) { foreach my $fh (@ready) { if ($stderr && fileno($fh) == fileno(\*CATCHERR)) { $$stderr .= do { local $/; <$fh> }; } elsif($stdout) { $$stdout .= do { local $/; <$fh> }; } $sel->remove($fh) if eof($fh); } } waitpid($pid, 0) if $pid; ... ### -- Package-specific info: dovecot configuration --------------------- # 2.2.9: /etc/dovecot/dovecot.conf # OS: Linux 3.11-2-amd64 x86_64 Debian jessie/sid auth_mechanisms = plain login digest-md5 disable_plaintext_auth = no mail_location = maildir:~/ mail_plugins = quota namespace inbox { inbox = yes location = prefix = INBOX. separator = . type = private } passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } plugin { quota = maildir:User quota quota_rule = *:storage=1GB quota_warning = storage=95%% quota-warning 95 %u quota_warning2 = storage=80%% quota-warning 80 %u } protocols = " imap pop3" service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } unix_listener auth-master { mode = 0600 user = vmail } } service quota-warning { executable = script /var/www/imscp/engine/quota/imscp-dovecot-quota.sh group = imscp unix_listener quota-warning { mode = 0600 user = vmail } } ssl = no userdb { driver = prefetch } userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } protocol imap { mail_plugins = quota imap_quota } protocol pop3 { pop3_uidl_format = %u-%v } protocol lda { auth_socket_path = /var/run/dovecot/auth-master mail_plugins = quota postmaster_address = [email protected] } -- System Information: Debian Release: jessie/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 3.11-2-amd64 (SMP w/4 CPU cores) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages dovecot-core depends on: ii adduser 3.113+nmu3 ii debconf [debconf-2.0] 1.5.52 ii libbz2-1.0 1.0.6-5 ii libc6 2.17-97 ii libpam-runtime 1.1.3-9 ii libpam0g 1.1.3-9 ii libssl1.0.0 1.0.1f-1 ii libwrap0 7.6.q-24 ii openssl 1.0.1f-1 ii ucf 3.0027+nmu1 ii zlib1g 1:1.2.8.dfsg-1 dovecot-core recommends no packages. Versions of packages dovecot-core suggests: pn dovecot-gssapi <none> ii dovecot-imapd 1:2.2.9-1 pn dovecot-ldap <none> pn dovecot-lmtpd <none> pn dovecot-managesieved <none> ii dovecot-mysql 1:2.2.9-1 pn dovecot-pgsql <none> ii dovecot-pop3d 1:2.2.9-1 pn dovecot-sieve <none> pn dovecot-solr <none> pn dovecot-sqlite <none> pn ntp <none> Versions of packages dovecot-core is related to: ii dovecot-core [dovecot-common] 1:2.2.9-1 pn dovecot-dbg <none> pn dovecot-dev <none> pn dovecot-gssapi <none> ii dovecot-imapd 1:2.2.9-1 pn dovecot-ldap <none> pn dovecot-lmtpd <none> pn dovecot-managesieved <none> ii dovecot-mysql 1:2.2.9-1 pn dovecot-pgsql <none> ii dovecot-pop3d 1:2.2.9-1 pn dovecot-sieve <none> pn dovecot-sqlite <none> -- Configuration Files: /etc/init.d/dovecot changed: PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="IMAP/POP3 mail server" NAME=dovecot DAEMON=/usr/sbin/dovecot DAEMON_ARGS="" SCRIPTNAME=/etc/init.d/$NAME CONF=/etc/dovecot/${NAME}.conf [ -r /etc/default/$NAME ] && . /etc/default/$NAME [ -x "$DAEMON" ] || exit 0 [ -f "$CONF" ] || exit 0 [ "$ENABLED" != "0" ] || exit 0 [ "$ALLOW_COREDUMPS" != "1" ] || ulimit -c unlimited . /lib/lsb/init-functions if [ ! -r ${CONF} ]; then log_daemon_msg "${CONF}: not readable" "$NAME" && log_end_msg 1; exit 1; fi if [ -f /etc/inetd.conf ]; then # The init script should do nothing if dovecot or another imap/pop3 server # is being run from inetd, and dovecot is configured to run as an imap or # pop3 service for p in `sed -r "s/^ *(([^:]+|\[[^]]+]|\*):)?(pop3s?|imaps?)[ \t].*/\3/;t;d" \ /etc/inetd.conf` do for q in `doveconf -n -h protocols` do if [ $p = $q ]; then log_daemon_msg "protocol ${p} configured both in inetd and in dovecot" "$NAME" && log_end_msg 1 exit 0 fi done done fi PIDBASE=${PIDBASE:-`doveconf -n -c ${CONF} -h base_dir`} PIDFILE=${PIDBASE:-/var/run/dovecot}/master.pid do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test -- -c ${CONF} > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- -c ${CONF} \ $DAEMON_ARGS \ || return 2 } do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name ${DAEMON##*/} RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --pidfile $PIDFILE --name ${DAEMON##*/} [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; reload|force-reload) log_daemon_msg "Reloading $DESC" "$NAME" do_reload log_end_msg $? ;; restart) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; status) status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $? ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2 exit 3 ;; esac -- debconf information: dovecot-core/ssl-cert-exists: * dovecot-core/ssl-cert-name: jessie.nuxwin.com * dovecot-core/create-ssl-cert: false -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

