variable %w recursive expanding

Cristiano Deana cristiano.deana at megaweb.it
Tue Aug 2 12:58:17 UTC 2022


Hi,

I had a similar problem.
Solved with "password, TO_BASE64('%w')" and decoding later into the 
(php) script updating my db

Il 01/08/2022 10:47, Franz Beslmeisl ha scritto:
> In order to change the password scheme I wrote a script named
> updateproxy that needs the plain text password from the user.
> To get that I use the line
> 
>      password_query = SELECT username as user, password, \
>        '%w' as userdb_plain_pass FROM auth_user WHERE username='%n'
> 
> This works nicely with almost all passwords but not with this one
> 
>      1234567%&/abcd
> 
> the error message being
> 
>      dovecot: Failed to expand plugin setting plain_pass =
>        '1234567%&/abcd': Unknown variable '%&'
> 
> It seems to me that dovecot tries to do another level of variable
> evaluation upon the **value** of the already evaluated variable.
> 
> So I searched for ways to escape problematic characters like %
> and changed my line to
> 
>      password_query = SELECT username as user, password, \
>        '%E{w}' as userdb_plain_pass FROM auth_user WHERE username='%n'
> 
> but this produces problems with password values containing quotes.
> 
> So how can I get a plain text password containing any ascii char
> (or even better any utf-8 char) safely to my script?
> 
> Thanks for your suggestions
> 
> 
> 
> -------------- here the nasty details, if you want -------------
> $ dovecot -n
> # 2.3.7.2 (3c910f64b): /etc/dovecot/dovecot.conf
> # Pigeonhole version 0.5.7.2 ()
> # OS: Linux 5.4.0-122-generic x86_64 Ubuntu 20.04.4 LTS
> # Hostname: mx-10-2.bildung.hessen.de
> auth_mechanisms = plain login
> auth_username_chars = 
> abcdefghijklmnopqrstuvwxyz_0123456789.ABCDEFGHIJKLMNOPQRSTUVWXYZ-@
> lda_mailbox_autocreate = yes
> lda_mailbox_autosubscribe = yes
> mail_location = maildir:~/Maildir
> mail_privileged_group = mail
> managesieve_notify_capability = mailto
> managesieve_sieve_capability = fileinto reject envelope 
> encoded-character vacation subaddress comparator-i;ascii-numeric 
> relational regex imap4flags copy include variables body enotify 
> environment mailbox date index ihave duplicate mime foreverypart 
> extracttext
> namespace inbox {
>    inbox = yes
>    location =
>    mailbox Drafts {
>      auto = subscribe
>      special_use = \Drafts
>    }
>    mailbox Junk {
>      auto = subscribe
>      special_use = \Junk
>    }
>    mailbox Sent {
>      auto = subscribe
>      special_use = \Sent
>    }
>    mailbox "Sent Messages" {
>      special_use = \Sent
>    }
>    mailbox Trash {
>      auto = subscribe
>      special_use = \Trash
>    }
>    prefix =
> }
> passdb {
>    # the following file contains a '%w'-line
>    args = /etc/dovecot/db1.conf
>    driver = sql
> }
> passdb {
>    # the following file contains a '%w'-line
>    args = /etc/dovecot/db2.conf
>    driver = sql
> }
> passdb {
>    # the following file contains no '%w'-line (just for detail)
>    args = /etc/dovecot/db3.conf
>    driver = sql
> }
> plugin {
>    sieve = ~/.dovecot.sieve
>    sieve_dir = ~/sieve
>    sieve_max_actions = 64
>    sieve_max_redirects = 16
>    sieve_max_script_size = 10M
>    sieve_trace_debug = yes
>    sieve_user_log = ~/sievelog
>    sieve_vacation_dont_check_recipient = yes
>    sieve_vacation_use_original_recipient = yes
> }
> protocols = imap sieve lmtp
> service auth {
>    unix_listener /var/spool/postfix/private/dovecot-auth {
>      group = postfix
>      mode = 0660
>      user = postfix
>    }
> }
> service imap {
>    executable = imap after-login
> }
> service lmtp {
>    unix_listener /var/spool/postfix/private/dovecot-lmtp {
>      group = postfix
>      mode = 0660
>      user = postfix
>    }
> }
> service after-login {
>    executable = script-login /etc/dovecot/updateproxy
>    user = vmail
> }
> service stats {
>    unix_listener stats-reader {
>      group = mail
>      mode = 0666
>    }
>    unix_listener stats-writer {
>      group = mail
>      mode = 0666
>    }
> }
> ssl_cert = </etc/dovecot/private/dovecot.pem
> ssl_cipher_list = ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP:-SSLv3
> ssl_key = # hidden, use -P to show it
> ssl_min_protocol = SSLv3
> ssl_prefer_server_ciphers = yes
> userdb {
>    args = uid=vmail gid=vmail home=/var/vmail/%n
>    driver = static
> }
> protocol lmtp {
>    mail_plugins = quota sieve
>    postmaster_address = somebody at somwhere.org
> }
> protocol lda {
>    deliver_log_format = msgid=%m: %$
>    mail_plugins = sieve
>    postmaster_address = somebody at somehwere.org
>    quota_full_tempfail = yes
>    rejection_reason = Your message to <%t> was automatically rejected:%n%r
> }
> protocol imap {
>    imap_client_workarounds = delay-newmail
>    mail_max_userip_connections = 300
> }
> 

-- 

###############################
# Cristiano Deana #
# #
# Senior Network Engineer #
# Digital Response Team #
# CittaStudi S.p.a. #
# off. +39 015 855 1172 #
# cell +39 328 310 6392 #
###############################


More information about the dovecot mailing list