HTTP DoveAdm API - Possible bug?
Hi all,
It seems that setting userMask in the doveadm http api's "user" command to anything involving wildcards ?s or *s causes the API to fail.
When using the API with a userMask set to the fully qualified email address, I get the expected fields back.
From a python shell, with an asterisk causes the following behaviour (note that doveadm is a python module that wrappers the dovecot API into Python's requests module).
doveadm.do_query("http://[xxxx:xxxx:xxxx:xxxx::ffff]:24280", "API_KEY_HERE", [ ["user", { "userMask": ["*"] }, "c01"] ]) '[["doveadmResponse",,"c01"]]'
If I run the same command with a valid mailbox in the userMask Field, I get the response I expect:
doveadm.do_query("http://[[xxxx:xxxx:xxxx:xxxx::ffff]:24280", "API_KEY_HERE", [ ["user", { "userMask": ["test@test.mydomain.com"] }, "c01"] ]) '[["doveadmResponse",{"test@test.mydomain.com":{"uid":"x","gid":"y","home":"/mail/test.mydomain.com/users/test","mail":"maildir:/mail/test.mydomain.com/users/test/Maildir/:INDEX=/indexes/test.mydomain.com/test","nice":"10"}},"c01"]]'
Chatting with people in #dovecot revealed similar behaviour elsewhere so it doesn't appear to be just me. I've also selectively edited the above to avoid leaking data.
We're running on the following
# 2.2.34 (874deae): /etc/dovecot/dovecot.conf # Pigeonhole version 0.4.22 (22940fb7) # OS: Linux 4.9.0-7-amd64 x86_64 Debian 9.5 ext4
If you need a full copy of the config, please let me know and I'll talk to my client, however, I don't think this is config related.
Thanks in advance.
Regards,
Chris Malton
-- Delta V Technologies Limited 03333 402 402 www.deltav-tech.co.uk Office: 17 Elm Close, Southampton, SO16 7DT Company No. 11006104 Registered in England and Wales
Yeah. This is a bug, there is a fix pending.
From bb200128c83610d213b2ff2e59f1e0440ecbd2c9 Mon Sep 17 00:00:00 2001 From: Aki Tuomi
Date: Tue, 18 Sep 2018 20:37:38 +0300 Subject: [PATCH] doveadm: Fix doveadm user output when called from server
Was forgotten in a13b1245bee0b6524b4aeb3c8fd9e34af648b746 --- src/doveadm/doveadm-auth-server.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/doveadm/doveadm-auth-server.c b/src/doveadm/doveadm-auth-server.c index 44278e467e..d9e4e01c74 100644 --- a/src/doveadm/doveadm-auth-server.c +++ b/src/doveadm/doveadm-auth-server.c @@ -170,6 +170,10 @@ cmd_user_list(struct auth_master_connection *conn, const char *username, *user_mask = "*"; unsigned int i; + doveadm_print_init(DOVEADM_PRINT_TYPE_FORMATTED); + doveadm_print_formatted_set_format("%{username}\n"); + doveadm_print_header_simple("username"); + if (users[0] != NULL && users[1] == NULL) user_mask = users[0]; @@ -180,7 +184,7 @@ cmd_user_list(struct auth_master_connection *conn, break; } if (users[i] != NULL) - printf("%s\n", username); + doveadm_print(username); } if (auth_master_user_list_deinit(&ctx) < 0) i_fatal("user listing failed"); -- 2.18.0 Aki On 18.09.2018 17:09, Chris Malton wrote:
Hi all,
It seems that setting userMask in the doveadm http api's "user" command to anything involving wildcards ?s or *s causes the API to fail.
When using the API with a userMask set to the fully qualified email address, I get the expected fields back.
From a python shell, with an asterisk causes the following behaviour (note that doveadm is a python module that wrappers the dovecot API into Python's requests module).
doveadm.do_query("http://[xxxx:xxxx:xxxx:xxxx::ffff]:24280", "API_KEY_HERE", [ ["user", { "userMask": ["*"] }, "c01"] ]) '[["doveadmResponse",,"c01"]]'
If I run the same command with a valid mailbox in the userMask Field, I get the response I expect:
doveadm.do_query("http://[[xxxx:xxxx:xxxx:xxxx::ffff]:24280", "API_KEY_HERE", [ ["user", { "userMask": ["test@test.mydomain.com"] }, "c01"] ]) '[["doveadmResponse",{"test@test.mydomain.com":{"uid":"x","gid":"y","home":"/mail/test.mydomain.com/users/test","mail":"maildir:/mail/test.mydomain.com/users/test/Maildir/:INDEX=/indexes/test.mydomain.com/test","nice":"10"}},"c01"]]'
Chatting with people in #dovecot revealed similar behaviour elsewhere so it doesn't appear to be just me. I've also selectively edited the above to avoid leaking data.
We're running on the following
# 2.2.34 (874deae): /etc/dovecot/dovecot.conf # Pigeonhole version 0.4.22 (22940fb7) # OS: Linux 4.9.0-7-amd64 x86_64 Debian 9.5 ext4
If you need a full copy of the config, please let me know and I'll talk to my client, however, I don't think this is config related.
Thanks in advance.
Regards,
Chris Malton
Thanks Aki, We'll see if we can backport this internally to the version we're currently running as a temporary fix until we can do a proper upgrade. Regards, Chris On 19/09/18 07:57, Aki Tuomi wrote:
Yeah. This is a bug, there is a fix pending.
From bb200128c83610d213b2ff2e59f1e0440ecbd2c9 Mon Sep 17 00:00:00 2001 From: Aki Tuomi
Date: Tue, 18 Sep 2018 20:37:38 +0300 Subject: [PATCH] doveadm: Fix doveadm user output when called from server Was forgotten in a13b1245bee0b6524b4aeb3c8fd9e34af648b746 --- src/doveadm/doveadm-auth-server.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/doveadm/doveadm-auth-server.c b/src/doveadm/doveadm-auth-server.c index 44278e467e..d9e4e01c74 100644 --- a/src/doveadm/doveadm-auth-server.c +++ b/src/doveadm/doveadm-auth-server.c @@ -170,6 +170,10 @@ cmd_user_list(struct auth_master_connection *conn, const char *username, *user_mask = "*"; unsigned int i;
+ doveadm_print_init(DOVEADM_PRINT_TYPE_FORMATTED); + doveadm_print_formatted_set_format("%{username}\n"); + doveadm_print_header_simple("username"); + if (users[0] != NULL && users[1] == NULL) user_mask = users[0];
@@ -180,7 +184,7 @@ cmd_user_list(struct auth_master_connection *conn, break; } if (users[i] != NULL) - printf("%s\n", username); + doveadm_print(username); } if (auth_master_user_list_deinit(&ctx) < 0) i_fatal("user listing failed");
-- Delta V Technologies Limited 03333 402 402 www.deltav-tech.co.uk Office: 17 Elm Close, Southampton, SO16 7DT Company No. 11006104 Registered in England and Wales
participants (2)
-
Aki Tuomi
-
Chris Malton