mailcow-dockerized
mailcow-dockerized copied to clipboard
api endpoint /api/v1/edit/domain adds tags instead of replacing them
Contribution guidelines
- [X] I've read the contribution guidelines and wholeheartedly agree
I've found a bug and checked that ...
- [X] ... I understand that not following the below instructions will result in immediate closure and/or deletion of my issue.
- [X] ... I have understood that this bug report is dedicated for bugs, and not for support-related inquiries.
- [X] ... I have understood that answers are voluntary and community-driven, and not commercial support.
- [X] ... I have verified that my issue has not been already answered in the past. I also checked previous issues.
Description
posting to api endpoint /api/v1/edit/domain with attr tags adds the tags instead of replacing the tags
Logs
84.156.11.174 - - [14/Jul/2022:10:57:47 +0200] "POST /api/v1/edit/domain HTTP/2.0" 200 120 "https://mail.with-it.de/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15"
Steps to reproduce
- create domain, e.g. ""domain.tld", with tags "tag1, tag2"
- curl post edit domain
curl -X 'POST' \
'https://.../api/v1/edit/domain' \
-H 'accept: */*' \
-H 'X-API-Key: ...' \
-H 'Content-Type: application/json' \
-d '{
"attr": {
"tags": [
"tag3",
"tag4"
]
},
"items": "domain.tld"
}'
- curl get domain
curl -X 'GET' \
'https://.../api/v1/get/domain/domain.tld' \
-H 'accept: application/json' \
-H '...'
- response
{
"max_new_mailbox_quota": 10737418240,
"def_new_mailbox_quota": 3221225472,
"quota_used_in_domain": "0",
"bytes_total": 0,
"msgs_total": 0,
"mboxes_in_domain": 0,
"mboxes_left": 10,
"domain_name": "domain.tld",
"description": "some decsription",
"max_num_aliases_for_domain": 400,
"max_num_mboxes_for_domain": 10,
"def_quota_for_mbox": 3221225472,
"max_quota_for_mbox": 10737418240,
"max_quota_for_domain": 10737418240,
"relayhost": "0",
"backupmx": 1,
"backupmx_int": 1,
"gal": 0,
"gal_int": 0,
"rl": {
"value": "10",
"frame": "s"
},
"active": 1,
"active_int": 1,
"relay_all_recipients": 1,
"relay_all_recipients_int": 1,
"relay_unknown_only": 1,
"relay_unknown_only_int": 1,
"aliases_in_domain": 0,
"aliases_left": 400,
"domain_admins": "-",
"tags": [
"tag1",
"tag2",
"tag3",
"tag4"
]
- tags should be
"tags": [
"tag3",
"tag4"
]
System information
Question | Answer |
---|---|
My operating system | Ubuntu 20.04 |
Is Apparmor, SELinux or similar active? | no |
Virtualization technology (KVM, VMware, Xen, etc - LXC and OpenVZ are not supported | no |
Server/VM specifications (Memory, CPU Cores) | 8 GB 2 VCPUs |
Docker version (docker version ) |
20.10.12 |
docker-compose version (docker-compose version ) |
v2.6.1 |
mailcow version (git describe --tags `git rev-list --tags --max-count=1` ) |
2022-06b |
Reverse proxy (custom solution) | - |
Output of git diff origin/master
, any other changes to the code? If so, please post them:
no changes
All third-party firewalls and custom iptables rules are unsupported. Please check the Docker docs about how to use Docker with your own ruleset. Nevertheless, iptabels output can help us to help you: iptables -L -vn:
Chain INPUT (policy ACCEPT 1198K packets, 262M bytes)
pkts bytes target prot opt in out source destination
1199K 263M MAILCOW all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
37M 11G MAILCOW all -- * * 0.0.0.0/0 0.0.0.0/0
37M 11G DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
37M 11G DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
21M 3394M ACCEPT all -- * br-mailcow 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2596K 148M DOCKER all -- * br-mailcow 0.0.0.0/0 0.0.0.0/0
13M 7112M ACCEPT all -- br-mailcow !br-mailcow 0.0.0.0/0 0.0.0.0/0
708K 43M ACCEPT all -- br-mailcow br-mailcow 0.0.0.0/0 0.0.0.0/0
293 94475 ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
317 158K ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 1269K packets, 345M bytes)
pkts bytes target prot opt in out source destination
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.249 tcp dpt:6379
0 0 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.2 tcp dpt:8983
0 0 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.7 tcp dpt:3306
2128 111K ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.253 tcp dpt:587
105 5944 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.253 tcp dpt:465
384 19980 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.253 tcp dpt:25
0 0 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.250 tcp dpt:12345
6 324 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.250 tcp dpt:4190
344 20556 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.250 tcp dpt:995
7909 480K ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.250 tcp dpt:993
1398 83660 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.250 tcp dpt:143
152 8792 ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.250 tcp dpt:110
1799K 100M ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.10 tcp dpt:443
75996 4256K ACCEPT tcp -- !br-mailcow br-mailcow 0.0.0.0/0 172.22.1.10 tcp dpt:80
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
pkts bytes target prot opt in out source destination
13M 7112M DOCKER-ISOLATION-STAGE-2 all -- br-mailcow !br-mailcow 0.0.0.0/0 0.0.0.0/0
317 158K DOCKER-ISOLATION-STAGE-2 all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
37M 11G RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * br-mailcow 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * docker0 0.0.0.0/0 0.0.0.0/0
13M 7113M RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
37M 11G RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain MAILCOW (2 references)
pkts bytes target prot opt in out source destination
ip6tables -L -vn:
Chain INPUT (policy ACCEPT 36204 packets, 153M bytes)
pkts bytes target prot opt in out source destination
36248 153M MAILCOW all * * ::/0 ::/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1495K 989M MAILCOW all * * ::/0 ::/0
1496K 989M DOCKER-USER all * * ::/0 ::/0
1496K 989M DOCKER-ISOLATION-STAGE-1 all * * ::/0 ::/0
1462K 986M DOCKER all * br-mailcow ::/0 ::/0
1211K 968M ACCEPT all * br-mailcow ::/0 ::/0 ctstate RELATED,ESTABLISHED
33806 3501K ACCEPT all br-mailcow !br-mailcow ::/0 ::/0
251K 18M ACCEPT all br-mailcow br-mailcow ::/0 ::/0
Chain OUTPUT (policy ACCEPT 30095 packets, 2109K bytes)
pkts bytes target prot opt in out source destination
Chain DOCKER (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::e tcp dpt:25
0 0 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::e tcp dpt:465
0 0 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::e tcp dpt:587
0 0 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::d tcp dpt:110
0 0 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::d tcp dpt:143
0 0 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::d tcp dpt:4190
0 0 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::d tcp dpt:993
0 0 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::d tcp dpt:995
64 6091 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::f tcp dpt:443
65 5547 ACCEPT tcp !br-mailcow br-mailcow ::/0 fd4d:6169:6c63:6f77::f tcp dpt:80
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
pkts bytes target prot opt in out source destination
33806 3501K DOCKER-ISOLATION-STAGE-2 all br-mailcow !br-mailcow ::/0 ::/0
1496K 989M RETURN all * * ::/0 ::/0
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all * br-mailcow ::/0 ::/0
33806 3501K RETURN all * * ::/0 ::/0
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
1496K 989M RETURN all * * ::/0 ::/0
Chain MAILCOW (2 references)
pkts bytes target prot opt in out source destination
iptables -L -vn -t nat:
Chain PREROUTING (policy ACCEPT 1077K packets, 68M bytes)
pkts bytes target prot opt in out source destination
2085K 116M DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 194K packets, 11M bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 172 packets, 13808 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 2596K packets, 148M bytes)
pkts bytes target prot opt in out source destination
175K 13M MASQUERADE all -- * !br-mailcow 172.22.1.0/24 0.0.0.0/0
22 1408 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0
0 0 MASQUERADE tcp -- * * 172.22.1.249 172.22.1.249 tcp dpt:6379
0 0 MASQUERADE tcp -- * * 172.22.1.2 172.22.1.2 tcp dpt:8983
0 0 MASQUERADE tcp -- * * 172.22.1.7 172.22.1.7 tcp dpt:3306
0 0 MASQUERADE tcp -- * * 172.22.1.253 172.22.1.253 tcp dpt:587
0 0 MASQUERADE tcp -- * * 172.22.1.253 172.22.1.253 tcp dpt:465
0 0 MASQUERADE tcp -- * * 172.22.1.253 172.22.1.253 tcp dpt:25
0 0 MASQUERADE tcp -- * * 172.22.1.250 172.22.1.250 tcp dpt:12345
0 0 MASQUERADE tcp -- * * 172.22.1.250 172.22.1.250 tcp dpt:4190
0 0 MASQUERADE tcp -- * * 172.22.1.250 172.22.1.250 tcp dpt:995
0 0 MASQUERADE tcp -- * * 172.22.1.250 172.22.1.250 tcp dpt:993
0 0 MASQUERADE tcp -- * * 172.22.1.250 172.22.1.250 tcp dpt:143
0 0 MASQUERADE tcp -- * * 172.22.1.250 172.22.1.250 tcp dpt:110
0 0 MASQUERADE tcp -- * * 172.22.1.10 172.22.1.10 tcp dpt:443
0 0 MASQUERADE tcp -- * * 172.22.1.10 172.22.1.10 tcp dpt:80
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- br-mailcow * 0.0.0.0/0 0.0.0.0/0
0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0
0 0 DNAT tcp -- !br-mailcow * 0.0.0.0/0 127.0.0.1 tcp dpt:7654 to:172.22.1.249:6379
0 0 DNAT tcp -- !br-mailcow * 0.0.0.0/0 127.0.0.1 tcp dpt:18983 to:172.22.1.2:8983
0 0 DNAT tcp -- !br-mailcow * 0.0.0.0/0 127.0.0.1 tcp dpt:13306 to:172.22.1.7:3306
2128 111K DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:587 to:172.22.1.253:587
105 5944 DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:465 to:172.22.1.253:465
384 19980 DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 to:172.22.1.253:25
0 0 DNAT tcp -- !br-mailcow * 0.0.0.0/0 127.0.0.1 tcp dpt:19991 to:172.22.1.250:12345
6 324 DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4190 to:172.22.1.250:4190
344 20556 DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:995 to:172.22.1.250:995
7911 480K DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:993 to:172.22.1.250:993
1398 83660 DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:143 to:172.22.1.250:143
152 8792 DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 to:172.22.1.250:110
1800K 100M DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 to:172.22.1.10:443
76016 4257K DNAT tcp -- !br-mailcow * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.22.1.10:80
ip6tables -L -vn -t nat:
Chain PREROUTING (policy ACCEPT 106K packets, 8781K bytes)
pkts bytes target prot opt in out source destination
15 1176 DOCKER all * * ::/0 ::/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 1 packets, 56 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 367 packets, 34769 bytes)
pkts bytes target prot opt in out source destination
0 0 DOCKER all * * ::/0 !::1 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 82482 packets, 6604K bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all * br-mailcow ::/0 ::/0 ADDRTYPE match dst-type LOCAL
23885 2218K MASQUERADE all * !br-mailcow fd4d:6169:6c63:6f77::/64 ::/0
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::e fd4d:6169:6c63:6f77::e tcp dpt:25
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::e fd4d:6169:6c63:6f77::e tcp dpt:465
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::e fd4d:6169:6c63:6f77::e tcp dpt:587
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::d fd4d:6169:6c63:6f77::d tcp dpt:110
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::d fd4d:6169:6c63:6f77::d tcp dpt:143
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::d fd4d:6169:6c63:6f77::d tcp dpt:4190
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::d fd4d:6169:6c63:6f77::d tcp dpt:993
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::d fd4d:6169:6c63:6f77::d tcp dpt:995
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::f fd4d:6169:6c63:6f77::f tcp dpt:443
0 0 MASQUERADE tcp * * fd4d:6169:6c63:6f77::f fd4d:6169:6c63:6f77::f tcp dpt:80
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all br-mailcow * ::/0 ::/0
0 0 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:25 to:[fd4d:6169:6c63:6f77::e]:25
0 0 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:465 to:[fd4d:6169:6c63:6f77::e]:465
0 0 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:587 to:[fd4d:6169:6c63:6f77::e]:587
0 0 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:110 to:[fd4d:6169:6c63:6f77::d]:110
0 0 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:143 to:[fd4d:6169:6c63:6f77::d]:143
0 0 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:4190 to:[fd4d:6169:6c63:6f77::d]:4190
0 0 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:993 to:[fd4d:6169:6c63:6f77::d]:993
0 0 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:995 to:[fd4d:6169:6c63:6f77::d]:995
5 400 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:443 to:[fd4d:6169:6c63:6f77::f]:443
9 720 DNAT tcp !br-mailcow * ::/0 ::/0 tcp dpt:80 to:[fd4d:6169:6c63:6f77::f]:80
DNS problems? Please run docker exec -it $(docker ps -qf name=acme-mailcow) dig +short stackoverflow.com @172.22.1.254
(set the IP accordingly, if you changed the internal mailcow network) and post the output:
151.101.193.69
151.101.65.69
151.101.1.69
151.101.129.69
this is the expected behaviour. if you want to delete tags you have to POST /api/v1/delete/domain/tag/{domain}
Thank you very much for the fast answers. I understand. Please allow me to mention the following:
I started to implement a terraform provider for mailcow based on the api. Terraform is declarative, so the expected behaviour ist either destroy, update or create to produce the described state. If a describe the state as
resource "mailcow_domain" {
domain = "mailcow.tld"
tags = ["tag1", "tag2"]
}
and apply this the domain has the tags 'tag1' and 'tag2'. If a change the description to
resource "mailcow_domain" {
domain = "mailcow.tld"
tags = ["tag3", "tag4"]
}
and apply this again, the expected result is that the domain has the tags 'tag3' and 'tag4' and no more the tags 'tag1', 'tag2'. This the output of terraform plan:
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
# mailcow_domain.mailcow will be updated in-place
~ resource "mailcow_domain" "mailcow" {
id = "mailcow.tld"
~ tags = [
- "tag1",
- "tag2",
+ "tag3",
+ "tag4",
]
# (14 unchanged attributes hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
That is the principle of terraform. The current behaviour has the consequence that implementing the resource "mailcow_domain" in the terraform provider becomes very complex and can only be done by an extra resource "mailcow_domain_tag".
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.