variable %w recursive expanding

Paul Kudla (SCOM.CA Internet Services Inc.) paul at scom.ca
Tue Aug 2 13:51:14 UTC 2022


yep that would work !


Happy Tuesday !!!
Thanks - paul

Paul Kudla


Scom.ca Internet Services <http://www.scom.ca>
004-1009 Byron Street South
Whitby, Ontario - Canada
L1N 4S3

Toronto 416.642.7266
Main 1.866.411.7266
Fax 1.888.892.7266
Email paul at scom.ca
On 8/2/2022 8:58 AM, Cristiano Deana wrote:
>
> 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
>> }
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://dovecot.org/pipermail/dovecot/attachments/20220802/51dc99cb/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: scomca-logo.jpg
Type: image/jpeg
Size: 135491 bytes
Desc: not available
URL: <https://dovecot.org/pipermail/dovecot/attachments/20220802/51dc99cb/attachment-0001.jpg>


More information about the dovecot mailing list