Bug#1068478: dovecot-core: Wildcard !include statements fail if nothing matches

2024-04-16 Thread Noah Meyerhans
Control: tags -1 + confirmed upstream
Control: severity -1 minor

On Fri, Apr 05, 2024 at 10:04:29PM +, Einhard Leichtfuß wrote:
> when the Dovecot configuration contains an `!include` statement with a
> wildcard that does not match anything, dovecot prints an error and
> terminates.
> 
> Expected behaviour: Dovecot processes the configuration as if the
> `!include` statement was not present.
> 
> The upstream on-line documentation [0] says on `!include`:
> > It’s not an error if wildcards don’t result in any matching files.
> 
> [0] 
> 

Confirmed based on your repro steps.  The documentation does indeed
claim that this should not result in an error, but that's not consistent
with the code.  Some relevant snippets of code from
src/config/config-parser.c:

from config_parse_line():
if (strcmp(key, "!include") == 0)
return CONFIG_LINE_TYPE_INCLUDE;
if (strcmp(key, "!include_try") == 0)
return CONFIG_LINE_TYPE_INCLUDE_TRY;

This return value is later handled with a case statement in 
config_parser_apply_line():
case CONFIG_LINE_TYPE_INCLUDE:
case CONFIG_LINE_TYPE_INCLUDE_TRY:
(void)settings_include(ctx, fix_relative_path(value, 
ctx->cur_input),
   type == CONFIG_LINE_TYPE_INCLUDE_TRY);
break;

The result of the "type == CONFIG_LINE_TYPE_INCLUDE_TRY" statement is
passed as the bool ignore_errors parameter to bool ignore_errors(), so
if it evaluates to false as it does when type ==
CONFIG_LINE_TYPE_INCLUDE, then we return an error:

case GLOB_NOMATCH:
if (ignore_errors)
return 0;
ctx->error = "No matches";
return -1;

I will pass this along to upstream.  It's not clear from here whether
the issue is with the code or with the documentation.

noah



Bug#1068478: dovecot-core: Wildcard !include statements fail if nothing matches

2024-04-05 Thread Einhard Leichtfuß
Package: dovecot-core
Version: 1:2.3.21+dfsg1-3+b1
Severity: normal

Dear Maintainer,

when the Dovecot configuration contains an `!include` statement with a
wildcard that does not match anything, dovecot prints an error and
terminates.

Expected behaviour: Dovecot processes the configuration as if the
`!include` statement was not present.

The upstream on-line documentation [0] says on `!include`:
> It’s not an error if wildcards don’t result in any matching files.

[0] 


Steps to reproduce:

  mkdir dir
  printf '%s\n' '!include dir/*.conf' > dovecot.conf
  dovecot -Fc dovecot.conf
  doveconf -c dovecot.conf

Output of `dovecot -Fc doveconf.conf`:

  doveconf: Fatal: Error in configuration file dovecot.conf line 1: No matches

Output of `doveconf -c dovecot.conf`:

  # 2.3.21 (47349e2482): dovecot.conf
  # Pigeonhole version 0.5.21 (f6cd4b8e)
  doveconf: Fatal: Error in configuration file dovecot.conf line 1: No matches

Workaround 1:
 * Create an empty dummy configuration file in `dir/`.

Workaround 2:
 * Use `!include_try` instead.
   * Unlike `!include`, this also silently ignores read errors.

Possibly related upstream mailing list thread:
 * 

 * 


-- Package-specific info:

-- System Information:
Debian Release: trixie/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.7.9-amd64 (SMP w/2 CPU threads; PREEMPT)
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages dovecot-core depends on:
ii  adduser  3.137
ii  init-system-helpers  1.66
ii  libapparmor1 3.0.13-2
ii  libbz2-1.0   1.0.8-5.1
ii  libc62.37-15.1
ii  libcap2  1:2.66-5
ii  libcrypt11:4.4.36-4
ii  libexttextcat-2.0-0  3.4.7-1
ii  libicu72 72.1-4+b1
ii  liblua5.4-0  5.4.6-3+b1
ii  liblz4-1 1.9.4-2
ii  liblzma5 5.6.1+really5.4.5-1
ii  libpam-runtime   1.5.3-6
ii  libpam0g 1.5.3-6
ii  libsodium23  1.0.18-1
ii  libssl3t64   3.2.1-3
ii  libstemmer0d 2.2.0-4+b1
ii  libsystemd0  255.4-1+b1
ii  libtirpc3t64 1.3.4+ds-1.2
ii  libunwind8   1.6.2-3
ii  libwrap0 7.6.q-33
ii  libzstd1 1.5.5+dfsg2-2
ii  openssl  3.2.1-3
ii  ssl-cert 1.1.2
ii  ucf  3.0043+nmu1
ii  zlib1g   1:1.3.dfsg-3.1

dovecot-core recommends no packages.

Versions of packages dovecot-core suggests:
pn  dovecot-gssapi
pn  dovecot-imapd 
pn  dovecot-ldap  
pn  dovecot-lmtpd 
pn  dovecot-managesieved  
pn  dovecot-mysql 
pn  dovecot-pgsql 
pn  dovecot-pop3d 
pn  dovecot-sieve 
pn  dovecot-solr  
pn  dovecot-sqlite
pn  dovecot-submissiond   
pn  ntp   

Versions of packages dovecot-core is related to:
ii  dovecot-core [dovecot-common]  1:2.3.21+dfsg1-3+b1
pn  dovecot-dev
pn  dovecot-gssapi 
pn  dovecot-imapd  
pn  dovecot-ldap   
pn  dovecot-lmtpd  
pn  dovecot-managesieved   
pn  dovecot-mysql  
pn  dovecot-pgsql  
pn  dovecot-pop3d  
pn  dovecot-sieve  
pn  dovecot-sqlite 

-- no debconf information