iterate_query only works with

userdb {
  driver = sql
  args = /path/to/auth-sql.conf.ext
}

Aki

> On 02/12/2023 00:02 EET John Stoffel <j...@stoffel.org> wrote:
> 
>  
> >>>>> "John" == John Stoffel <j...@stoffel.org> writes:
> 
> Do I think I'm on the right track here, since I removed the following
> from /etc/dovecot/conf.d/auth-sql.conf.ext
> 
>     #userdb {
>     #  driver = static
>     #  args = uid=mail gid=mail home=/var/mail/%d/%n
>     #}
> 
> So now my error is as follows:
> 
>     # doveadm user -u '*'
>     Error: auth-master: userdb list: User listing returned failure
>     Fatal: user listing failed
> 
> Because now when I restart dovecot, I see the following in the log:
> 
>     Dec 01 16:55:14 master: Info: Dovecot v2.3.21 (47349e2482) starting up
>       for imap, lmtp, sieve (core dumps disabled)
>     Dec 01 16:55:14 auth: Warning: sql: Ignoring changed iterate_query in
>       /etc/dovecot/dovecot-sql.conf.ext, because userdb sql not used. (If
>       this is intentional, set userdb_warning_disable=yes)
>     Dec 01 16:55:14 auth: Error: auth-master client: Trying to iterate
>       users, but userdbs don't support it (created 0 msecs ago, handshake 0
>       msecs ago)
> 
> So I commented out my 'iterate_query = ...' (see below) from
> /etc/postfix/dovecot-sql.conf.ext and now I get the error on startup
> which says:
> 
>    Dec 01 16:57:42 master: Info: Dovecot v2.3.21 (47349e2482) starting up
>      for imap, lmtp, sieve (core dumps disabled)
>    Dec 01 16:57:42 auth: Error: auth-master client: Trying to iterate
>      users, but userdbs don't support it (created 0 msecs ago, handshake 0
>      msecs ago)
>    Dec 01 16:57:42 replicator: Error: auth-master: userdb list: User
>      listing returned failure
>    Dec 01 16:57:42 replicator: Error: listing users failed, can't
>      replicate existing data
> 
> Which tells me I need the iteracte_users setting, but I've got a bogus
> query in there.  So I think I should be using something like this:
> 
>   iterate_query = SELECT email AS user from virtual_users;
> 
> where 'virtual_users' is the one and only table in my sqlite db file.
> And I'm just returning the 'email' column as 'user', since that's what
> it seems to expect.  
> 
> Hmmm...
> 
> 
> > I've been pounding my head against the sand for a while here trying to
> > figure out why I can't get:
> 
> >        doveadm user '*' 
> 
> > working properly.  I've got a Debian 11 VPS runnig dovecot version
> > 2.3.21-1+debian10 and it works great.  But not I'm trying to add in
> > simple replication to a home dovecot instance over a wireguard tunnel
> > so I can do backups and have a little better resiliency.  Maybe.
> 
> > In any case, my sqlite schema looks like this:
> 
> sqlite> .schema virtual_users
> >     CREATE TABLE `virtual_users` (
> >       `id` integer NOT NULL PRIMARY KEY AUTOINCREMENT
> >     ,  `domain_id` integer NOT NULL
> >     ,  `password` varchar(106) NOT NULL
> >     ,  `email` varchar(100) NOT NULL
> >     ,  UNIQUE (`email`)
> >     ,  CONSTRAINT `virtual_users_ibfk_1` FOREIGN KEY (`domain_id`) 
> > REFERENCES `virtual_domains` (`id`) E
> >     );
> >     CREATE INDEX "idx_virtual_users_domain_id" ON "virtual_users" 
> > (`domain_id`);
> 
> 
> > and I don't have any other tables.  The 'domain_id' was/is a leftover
> > from my thinking I needed it for extra testing of other domains and
> > such.  
> 
> > I can do 'doveadm user j...@stoffel.org' and it works just fine.  When
> > I do "doveadm user '*'" it fails and I get:
> 
> >     doveadm user '*'
> >     Error: auth-master: userdb list: User listing returned failure
> >     Fatal: user listing failed
> 
> 
> > So my config looks like this:
> 
> >    root@mail:/etc/dovecot/conf.d# cat auth-sql.conf.ext
> >    # Authentication for SQL users. Included from 10-auth.conf.
> >    #
> >    # <doc/wiki/AuthDatabase.SQL.txt>
> 
> >    passdb {
> >      driver = sql
> 
> >      # Path for SQL configuration file, see
> >        example-config/dovecot-sql.conf.ext
> >      args = /etc/dovecot/dovecot-sql.conf.ext
> >    }
> 
> >    userdb {
> >      driver = static
> >      args = uid=mail gid=mail home=/var/mail/%d/%n
> >    }
> 
> > My /etc/dovecot/dovecot-sql.conf.ext has the following:
> 
> >    driver = sqlite
> >    connect = /etc/dovecot/private/virtual_users.sqlite3
> 
> >    default_pass_scheme = SHA512-CRYPT
> 
> >    password_query = SELECT '/var/mail/%d/%u' AS userdb_home, 'mail' AS 
> > userdb_uid, 'mail' AS userdb_gid, email as user, password FROM 
> > virtual_users WHERE email='%u';
> 
> >    iterate_query = SELECT email AS user from virtual_users;
> 
> > And my general doveadm config output is this, slightly edited down to
> > remove stuff I don't think I need to show is at the end.  Any hints on
> > what I've done wrong here?  Do I need a more complete sqlite3 schema?
> > I wish I could get more debugging info on what query it's trying to
> > run and the error(s) it's getting.  
> 
> > Thanks,
> > John
> 
> 
> 
> > # 2.3.21 (47349e2482): /etc/dovecot/dovecot.conf
> > # Pigeonhole version 0.5.21 (f6cd4b8e)
> > # OS: Linux 5.10.0-26-amd64 x86_64 Debian 11.8 ext4
> > # Hostname: localhost
> > # NOTE: Send doveconf -n output instead when asking for help.
> > auth_anonymous_username = anonymous
> > auth_cache_negative_ttl = 1 hours
> > auth_cache_size = 0
> > auth_cache_ttl = 1 hours
> > auth_cache_verify_password_with_worker = no
> > auth_debug = no
> > auth_debug_passwords = no
> > auth_failure_delay = 2 secs
> > auth_gssapi_hostname = 
> > auth_krb5_keytab = 
> > auth_master_user_separator = 
> > auth_mechanisms = plain login
> > auth_policy_check_after_auth = yes
> > auth_policy_check_before_auth = yes
> > auth_policy_hash_mech = sha256
> > auth_policy_hash_nonce = 
> > auth_policy_hash_truncate = 12
> > auth_policy_log_only = no
> > auth_policy_reject_on_fail = no
> > auth_policy_report_after_auth = yes
> > auth_policy_request_attributes = login=%{requested_username} 
> > pwhash=%{hashed_password} remote=%{rip} device_id=%{client_id} protocol=%s 
> > session_id=%{session}
> > auth_policy_server_api_header = 
> > auth_policy_server_timeout_msecs = 2000
> > auth_policy_server_url = 
> > auth_proxy_self = 
> > auth_realms = 
> > auth_socket_path = auth-userdb
> > auth_ssl_require_client_cert = no
> > auth_ssl_username_from_cert = no
> > auth_stats = no
> > auth_use_winbind = no
> > auth_username_chars = 
> > abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
> > auth_username_format = %Lu
> > auth_username_translation = 
> > auth_verbose = no
> > auth_verbose_passwords = no
> > auth_winbind_helper_path = /usr/bin/ntlm_auth
> > auth_worker_max_count = 30
> > base_dir = /run/dovecot
> > config_cache_size = 1 M
> > debug_log_path = 
> > default_client_limit = 1000
> > default_idle_kill = 1 mins
> > default_internal_group = dovecot
> > default_internal_user = dovecot
> > default_login_user = dovenull
> > default_process_limit = 100
> > default_vsz_limit = 256 M
> > deliver_log_format = msgid=%m: %$
> > dict_db_config = 
> > disable_plaintext_auth = yes
> > dotlock_use_excl = yes
> > doveadm_allowed_commands = 
> > doveadm_api_key = 
> > doveadm_http_rawlog_dir = 
> > doveadm_password = 
> > doveadm_port = 0
> > doveadm_socket_path = doveadm-server
> > doveadm_ssl = no
> > doveadm_username = doveadm
> > doveadm_worker_count = 0
> > first_valid_gid = 1
> > first_valid_uid = 0
> > import_environment = TZ CORE_OUTOFMEM CORE_ERROR LISTEN_PID LISTEN_FDS 
> > NOTIFY_SOCKET
> > info_log_path = 
> > libexec_dir = /usr/lib/dovecot
> > listen = *
> > log_core_filter = 
> > log_debug = 
> > log_path = /var/log/dovecot.log
> > log_timestamp = "%b %d %H:%M:%S "
> > mail_access_groups = 
> > mail_always_cache_fields = 
> > mail_attachment_detection_options = 
> > mail_attachment_dir = 
> > mail_attachment_fs = sis posix
> > mail_attachment_hash = %{sha1}
> > mail_attachment_min_size = 128 k
> > mail_attribute_dict = 
> > mail_cache_fields = flags
> > mail_chroot = 
> > mail_debug = no
> > mail_fsync = optimized
> > mail_full_filesystem_access = no
> > mail_gid = 
> > mail_home = 
> > mail_location = maildir:/var/mail/%d/%n/Maildir
> > mail_log_prefix = "%s(%u)<%{pid}><%{session}>: "
> > mail_max_keyword_length = 50
> > mail_max_lock_timeout = 0
> > mail_max_userip_connections = 10
> > mail_never_cache_fields = imap.envelope
> > mail_nfs_index = no
> > mail_nfs_storage = no
> > mail_plugin_dir = /usr/lib/dovecot/modules
> > mail_plugins = " notify replication"
> > mail_prefetch_count = 0
> > mail_privileged_group = mail
> > mail_save_crlf = no
> > mail_server_admin = 
> > mail_server_comment = 
> > mail_shared_explicit_inbox = no
> > mail_sort_max_read_count = 0
> > mail_temp_dir = /tmp
> > mail_temp_scan_interval = 1 weeks
> > mail_uid = 
> > mail_vsize_bg_after_count = 0
> > passdb {
> >   args = /etc/dovecot/dovecot-sql.conf.ext
> >   auth_verbose = default
> >   default_fields = 
> >   deny = no
> >   driver = sql
> >   master = no
> >   mechanisms = 
> >   name = 
> >   override_fields = 
> >   pass = no
> >   result_failure = continue
> >   result_internalfail = continue
> >   result_success = return-ok
> >   skip = never
> >   username_filter = 
> > }
> > protocols = imap lmtp sieve
> > recipient_delimiter = +_
> > service auth-worker {
> >   chroot = 
> >   client_limit = 1
> >   drop_priv_before_exec = no
> >   executable = auth -w
> >   extra_groups = 
> >   group = 
> >   idle_kill = 0
> >   privileged_group = 
> >   process_limit = 0
> >   process_min_avail = 0
> >   protocol = 
> >   service_count = 0
> >   type = worker
> >   unix_listener auth-worker {
> >     group = 
> >     mode = 0600
> >     user = $default_internal_user
> >   }
> >   user = mail
> >   vsz_limit = 18446744073709551615 B
> > }
> > service auth {
> >   chroot = 
> >   client_limit = 0
> >   drop_priv_before_exec = no
> >   executable = auth
> >   extra_groups = 
> >   group = 
> >   idle_kill = 0
> >   privileged_group = 
> >   process_limit = 1
> >   process_min_avail = 0
> >   protocol = 
> >   service_count = 0
> >   type = 
> >   unix_listener /var/spool/postfix/private/auth {
> >     group = postfix
> >     mode = 0666
> >     user = postfix
> >   }
> >   unix_listener auth-client {
> >     group = 
> >     mode = 0600
> >     user = $default_internal_user
> >   }
> >   unix_listener auth-login {
> >     group = 
> >     mode = 0600
> >     user = $default_internal_user
> >   }
> >   unix_listener auth-master {
> >     group = 
> >     mode = 0600
> >     user = 
> >   }
> >   unix_listener auth-userdb {
> >     group = 
> >     mode = 0666
> >     user = mail
> >   }
> >   unix_listener login/login {
> >     group = 
> >     mode = 0666
> >     user = 
> >   }
> >   unix_listener token-login/tokenlogin {
> >     group = 
> >     mode = 0666
> >     user = 
> >   }
> >   user = dovecot
> >   vsz_limit = 18446744073709551615 B
> > }
> > service doveadm {
> >   chroot = 
> >   client_limit = 1
> >   drop_priv_before_exec = no
> >   executable = doveadm-server
> >   extra_groups = $default_internal_group
> >   group = 
> >   idle_kill = 0
> >   privileged_group = 
> >   process_limit = 0
> >   process_min_avail = 0
> >   protocol = 
> >   service_count = 1
> >   type = 
> >   unix_listener doveadm-server {
> >     group = 
> >     mode = 0600
> >     user = 
> >   }
> >   user = 
> >   vsz_limit = 18446744073709551615 B
> > }
> > service log {
> >   chroot = 
> >   client_limit = 0
> >   drop_priv_before_exec = no
> >   executable = log
> >   extra_groups = 
> >   group = 
> >   idle_kill = 4294967295 secs
> >   privileged_group = 
> >   process_limit = 1
> >   process_min_avail = 0
> >   protocol = 
> >   service_count = 0
> >   type = log
> >   unix_listener log-errors {
> >     group = 
> >     mode = 0600
> >     user = 
> >   }
> >   user = 
> >   vsz_limit = 18446744073709551615 B
> > }
> > state_dir = /var/lib/dovecot
> > stats_http_rawlog_dir = 
> > syslog_facility = mail
> > userdb {
> >   args = uid=mail gid=mail home=/var/mail/%d/%n
> >   auth_verbose = default
> >   default_fields = 
> >   driver = static
> >   name = 
> >   override_fields = 
> >   result_failure = continue
> >   result_internalfail = continue
> >   result_success = return-ok
> >   skip = never
> > }
> > _______________________________________________
> > dovecot mailing list -- dovecot@dovecot.org
> > To unsubscribe send an email to dovecot-le...@dovecot.org
> _______________________________________________
> dovecot mailing list -- dovecot@dovecot.org
> To unsubscribe send an email to dovecot-le...@dovecot.org
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org

Reply via email to