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]

Reply via email to