>>>>> "Aki" == Aki Tuomi <aki.tu...@open-xchange.com> writes:
> iterate_query only works with > userdb { > driver = sql > args = /path/to/auth-sql.conf.ext > } Thanks, that was the key part I was missing! Can you maybe think to update the code to give a more useful error message, or even a warning on startup which says something like: 'static driver does not support iterating users'? I tried looking at the source code, but it's going to take me quite a while to wrap my brain around how it's structured and how error messages propogate. Even just listing which userdb block failed would be a help, since you can have multiple ones defined. In any case, I've got it working now once I updated both areas in my configuration which referred to the 'static' driver. Thanks, really appreciate your help and all the work you guys do on this software! John >> 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