From 6adf1500a64480316abaabbfd209c25c12f60418 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 19 Feb 2022 14:54:45 +0300 Subject: [PATCH 01/45] Remove .build.yml --- .build.yml | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 .build.yml diff --git a/.build.yml b/.build.yml deleted file mode 100644 index 605b150..0000000 --- a/.build.yml +++ /dev/null @@ -1,36 +0,0 @@ -image: archlinux -packages: - - go - - pam - - scdoc - - curl -sources: - - https://github.com/foxcpp/maddy -tasks: - - build: | - cd maddy - go build ./... - - buildsh: | - cd maddy - ./build.sh - ./build.sh --destdir destdir/ install - find destdir/ - - test: | - cd maddy - go test ./... -coverprofile=coverage.out -covermode=atomic -race - - integration-test: | - cd maddy/tests - ./run.sh - - lint: | - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.33.0 - cd maddy/ - $(go env GOPATH)/bin/golangci-lint run || true - - build-man-pages: | - cd maddy/docs/man - for f in *.scd; do scdoc < $f > /dev/null; done - - upload-coverage: | - export CODECOV_TOKEN=a4598288-4c29-4da7-87cf-64a36e23d245 - cd maddy/ - bash <(curl https://codecov.io/bash) -f coverage.out -F unit - cd tests/ - bash <(curl https://codecov.io/bash) -f coverage.out -F integration From 7ee6a39c6a1939b376545f030a5efd6f90913583 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sun, 6 Mar 2022 15:52:36 +0300 Subject: [PATCH 02/45] auth/pam: Check for account/password expiry See GHSA-6cp7-g972-w9m9. Thanks Youssef Rebahi-Gilbert (ysf) for reporting the issue. --- cmd/maddy-pam-helper/pam.c | 33 +++++++++++++++++++++++++++++++++ internal/auth/pam/pam.c | 15 ++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/cmd/maddy-pam-helper/pam.c b/cmd/maddy-pam-helper/pam.c index f3ff832..0826002 100644 --- a/cmd/maddy-pam-helper/pam.c +++ b/cmd/maddy-pam-helper/pam.c @@ -1,3 +1,23 @@ +//+build libpam + +/* +Maddy Mail Server - Composable all-in-one email server. +Copyright © 2019-2022 Max Mazurov , Maddy Mail Server contributors + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + #define _POSIX_C_SOURCE 200809L #include #include @@ -46,6 +66,19 @@ struct error_obj run_pam_auth(const char *username, char *password) { return ret_val; } + status = pam_acct_mgmt(local_auth, PAM_SILENT|PAM_DISALLOW_NULL_AUTHTOK); + if (status != PAM_SUCCESS) { + struct error_obj ret_val; + if (status == PAM_AUTH_ERR || status == PAM_USER_UNKNOWN || status == PAM_NEW_AUTHTOK_REQD) { + ret_val.status = 1; + } else { + ret_val.status = 2; + } + ret_val.func_name = "pam_acct_mgmt"; + ret_val.error_msg = pam_strerror(local_auth, status); + return ret_val; + } + status = pam_end(local_auth, status); if (status != PAM_SUCCESS) { struct error_obj ret_val; diff --git a/internal/auth/pam/pam.c b/internal/auth/pam/pam.c index 270307e..0826002 100644 --- a/internal/auth/pam/pam.c +++ b/internal/auth/pam/pam.c @@ -2,7 +2,7 @@ /* Maddy Mail Server - Composable all-in-one email server. -Copyright © 2019-2020 Max Mazurov , Maddy Mail Server contributors +Copyright © 2019-2022 Max Mazurov , Maddy Mail Server contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -66,6 +66,19 @@ struct error_obj run_pam_auth(const char *username, char *password) { return ret_val; } + status = pam_acct_mgmt(local_auth, PAM_SILENT|PAM_DISALLOW_NULL_AUTHTOK); + if (status != PAM_SUCCESS) { + struct error_obj ret_val; + if (status == PAM_AUTH_ERR || status == PAM_USER_UNKNOWN || status == PAM_NEW_AUTHTOK_REQD) { + ret_val.status = 1; + } else { + ret_val.status = 2; + } + ret_val.func_name = "pam_acct_mgmt"; + ret_val.error_msg = pam_strerror(local_auth, status); + return ret_val; + } + status = pam_end(local_auth, status); if (status != PAM_SUCCESS) { struct error_obj ret_val; From cf94882052008d0a414304e0c99aecd1b57c2c9d Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sun, 6 Mar 2022 15:55:09 +0300 Subject: [PATCH 03/45] auth/pam: Fix double-free crash conv_func may be called multiple times and should return a unique pam_response each time. Closes #272. --- cmd/maddy-pam-helper/pam.c | 35 +++++++++++++++++++---------------- cmd/maddy-pam-helper/pam.h | 18 ++++++++++++++++++ internal/auth/pam/pam.c | 33 +++++++++++++++++++-------------- 3 files changed, 56 insertions(+), 30 deletions(-) diff --git a/cmd/maddy-pam-helper/pam.c b/cmd/maddy-pam-helper/pam.c index 0826002..4829164 100644 --- a/cmd/maddy-pam-helper/pam.c +++ b/cmd/maddy-pam-helper/pam.c @@ -1,5 +1,3 @@ -//+build libpam - /* Maddy Mail Server - Composable all-in-one email server. Copyright © 2019-2022 Max Mazurov , Maddy Mail Server contributors @@ -21,28 +19,33 @@ along with this program. If not, see . #define _POSIX_C_SOURCE 200809L #include #include +#include #include #include "pam.h" static int conv_func(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) { - *resp = (struct pam_response*)appdata_ptr; + struct pam_response *reply = malloc(sizeof(struct pam_response)); + if (reply == NULL) { + return PAM_CONV_ERR; + } + + char* password_cpy = malloc(strlen((char*)appdata_ptr)+1); + if (password_cpy == NULL) { + return PAM_CONV_ERR; + } + memcpy(password_cpy, (char*)appdata_ptr, strlen((char*)appdata_ptr)+1); + + reply->resp = password_cpy; + reply->resp_retcode = 0; + + // PAM frees pam_response for us. + *resp = reply; + return PAM_SUCCESS; } struct error_obj run_pam_auth(const char *username, char *password) { - // PAM frees pam_response for us. - struct pam_response *reply = malloc(sizeof(struct pam_response)); - if (reply == NULL) { - struct error_obj ret_val; - ret_val.status = 2; - ret_val.func_name = "malloc"; - ret_val.error_msg = "Out of memory"; - return ret_val; - } - reply->resp = password; - reply->resp_retcode = 0; - - const struct pam_conv local_conv = { conv_func, reply }; + const struct pam_conv local_conv = { conv_func, password }; pam_handle_t *local_auth = NULL; int status = pam_start("maddy", username, &local_conv, &local_auth); if (status != PAM_SUCCESS) { diff --git a/cmd/maddy-pam-helper/pam.h b/cmd/maddy-pam-helper/pam.h index 6df667f..e9831ecc 100644 --- a/cmd/maddy-pam-helper/pam.h +++ b/cmd/maddy-pam-helper/pam.h @@ -1,3 +1,21 @@ +/* +Maddy Mail Server - Composable all-in-one email server. +Copyright © 2019-2020 Max Mazurov , Maddy Mail Server contributors + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + #pragma once struct error_obj { diff --git a/internal/auth/pam/pam.c b/internal/auth/pam/pam.c index 0826002..38e9942 100644 --- a/internal/auth/pam/pam.c +++ b/internal/auth/pam/pam.c @@ -21,28 +21,33 @@ along with this program. If not, see . #define _POSIX_C_SOURCE 200809L #include #include +#include #include #include "pam.h" static int conv_func(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) { - *resp = (struct pam_response*)appdata_ptr; + struct pam_response *reply = malloc(sizeof(struct pam_response)); + if (reply == NULL) { + return PAM_CONV_ERR; + } + + char* password_cpy = malloc(strlen((char*)appdata_ptr)+1); + if (password_cpy == NULL) { + return PAM_CONV_ERR; + } + memcpy(password_cpy, (char*)appdata_ptr, strlen((char*)appdata_ptr)+1); + + reply->resp = password_cpy; + reply->resp_retcode = 0; + + // PAM frees pam_response for us. + *resp = reply; + return PAM_SUCCESS; } struct error_obj run_pam_auth(const char *username, char *password) { - // PAM frees pam_response for us. - struct pam_response *reply = malloc(sizeof(struct pam_response)); - if (reply == NULL) { - struct error_obj ret_val; - ret_val.status = 2; - ret_val.func_name = "malloc"; - ret_val.error_msg = "Out of memory"; - return ret_val; - } - reply->resp = password; - reply->resp_retcode = 0; - - const struct pam_conv local_conv = { conv_func, reply }; + const struct pam_conv local_conv = { conv_func, password }; pam_handle_t *local_auth = NULL; int status = pam_start("maddy", username, &local_conv, &local_auth); if (status != PAM_SUCCESS) { From f47f96a48e096d6fda3ae29279b1b78cd9471bf8 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sun, 6 Mar 2022 16:29:22 +0300 Subject: [PATCH 04/45] go get -u & go mod tidy --- go.mod | 60 +++++++++---------- go.sum | 180 ++++++++++++++++++++++++++++++++++----------------------- 2 files changed, 137 insertions(+), 103 deletions(-) diff --git a/go.mod b/go.mod index 9ec2860..af91f62 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,14 @@ module github.com/foxcpp/maddy go 1.15 require ( - blitiri.com.ar/go/spf v1.2.0 - cloud.google.com/go v0.97.0 // indirect + blitiri.com.ar/go/spf v1.3.0 + cloud.google.com/go/compute v1.5.0 // indirect + github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 - github.com/aws/aws-sdk-go v1.40.59 // indirect - github.com/caddyserver/certmagic v0.15.0 - github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/aws/aws-sdk-go v1.43.12 // indirect + github.com/caddyserver/certmagic v0.15.3 github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect - github.com/digitalocean/godo v1.69.1 // indirect + github.com/digitalocean/godo v1.75.0 // indirect github.com/emersion/go-imap v1.2.1-0.20220119134953-dcd9ee65c8c7 github.com/emersion/go-imap-appendlimit v0.0.0-20210907172056-e3baed77bbe4 github.com/emersion/go-imap-compress v0.0.0-20201103190257-14809af1d1b9 @@ -28,18 +28,16 @@ require ( github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 github.com/foxcpp/go-imap-namespace v0.0.0-20200722130255-93092adf35f1 github.com/foxcpp/go-imap-sql v0.5.1-0.20210828123943-f74ead8f06cd - github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897 + github.com/foxcpp/go-mockdns v1.0.0 github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect - github.com/go-ldap/ldap/v3 v3.4.1 + github.com/go-ldap/ldap/v3 v3.4.2 github.com/go-sql-driver/mysql v1.6.0 github.com/google/uuid v1.3.0 - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/johannesboyne/gofakes3 v0.0.0-20210704111953-6a9f95c2941c - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.13.6 // indirect - github.com/klauspost/cpuid/v2 v2.0.9 // indirect - github.com/lib/pq v1.10.3 + github.com/klauspost/compress v1.15.0 // indirect + github.com/klauspost/cpuid/v2 v2.0.11 // indirect + github.com/lib/pq v1.10.4 github.com/libdns/alidns v1.0.2 github.com/libdns/cloudflare v0.1.0 github.com/libdns/digitalocean v0.0.0-20210310230526-186c4ebd2215 @@ -49,34 +47,32 @@ require ( github.com/libdns/leaseweb v0.2.1 github.com/libdns/libdns v0.2.1 github.com/libdns/metaname v0.3.0 - github.com/libdns/namecheap v0.0.0-20210820020909-5f694e73b00f + github.com/libdns/namecheap v0.0.0-20211109042440-fc7440785c8e github.com/libdns/namedotcom v0.3.3 - github.com/libdns/route53 v1.1.1 - github.com/libdns/vultr v0.0.0-20201128180404-1d5ee21ea62f + github.com/libdns/route53 v1.1.2 + github.com/libdns/vultr v0.0.0-20211122184636-cd4cb5c12e51 github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-sqlite3 v2.0.3+incompatible - github.com/miekg/dns v1.1.43 + github.com/mholt/acmez v1.0.2 // indirect + github.com/miekg/dns v1.1.46 github.com/minio/md5-simd v1.1.2 // indirect - github.com/minio/minio-go/v7 v7.0.14 + github.com/minio/minio-go/v7 v7.0.23 github.com/minio/sha256-simd v1.0.0 // indirect github.com/pierrec/lz4 v2.6.1+incompatible // indirect - github.com/prometheus/client_golang v1.11.0 - github.com/prometheus/common v0.31.1 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/client_golang v1.12.1 github.com/rs/xid v1.3.0 // indirect github.com/urfave/cli v1.22.5 - github.com/vultr/govultr/v2 v2.9.0 // indirect + github.com/vultr/govultr/v2 v2.14.1 // indirect go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.7.0 // indirect - go.uber.org/zap v1.19.1 - golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 - golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0 - golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.21.0 + golang.org/x/crypto v0.0.0-20220214200702-86341886e292 + golang.org/x/net v0.0.0-20220225172249-27dd8689420f + golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac // indirect + golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 // indirect golang.org/x/text v0.3.7 - google.golang.org/api v0.58.0 // indirect - google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e // indirect - google.golang.org/grpc v1.41.0 // indirect - gopkg.in/ini.v1 v1.63.2 // indirect + golang.org/x/tools v0.1.9 // indirect + google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 // indirect + gopkg.in/ini.v1 v1.66.4 // indirect ) diff --git a/go.sum b/go.sum index 14e3176..61ab65e 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -blitiri.com.ar/go/spf v1.2.0 h1:aPpeEVKz5Ue4xb4SEt4AzScCSyES7/pol6znzZGle3A= -blitiri.com.ar/go/spf v1.2.0/go.mod h1:HLmgHxdrsqbBgi5omEopdAKm18PypvUKJGkF/j7BO0w= +blitiri.com.ar/go/spf v1.3.0 h1:KCBeatOXlg1OsRHHWMSPs0KAe0dfXuoQ1xGASgwd0Hs= +blitiri.com.ar/go/spf v1.3.0/go.mod h1:/wDIKCvGkTlOLcCjV9yvSZcRy5cM15fpUpAhff8Zjbk= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -27,14 +27,20 @@ cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWc cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0 h1:3DXvAyifywvq64LfkKaMOmkWPS1CikIQdMe2lY9vxU8= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= @@ -45,11 +51,11 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c h1:/IBSNwUN8+eKzUzbJPqhK839ygXJ82sde8x3ogr6R28= github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= +github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ= +github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 h1:KeNholpO2xKjgaaSyd+DyQRrsQjhbSeS7qe4nEw8aQw= @@ -62,17 +68,17 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/aws/aws-sdk-go v1.17.4/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.40.59 h1:aBHm8lOpwbqmqnUlV5mLYLSBa54bZGR8JZOMzDa/r/Q= -github.com/aws/aws-sdk-go v1.40.59/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go v1.41.14/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go v1.43.12 h1:wOdx6+reSDpUBFEuJDA6edCrojzy8rOtMzhS2rD9+7M= +github.com/aws/aws-sdk-go v1.43.12/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/caddyserver/certmagic v0.15.0 h1:UZBNGcr/3wWLP+3k//rfrsrMWAa7J0u7MBnhLd3lZa0= -github.com/caddyserver/certmagic v0.15.0/go.mod h1:/0VQ5og2Jxa5yBQ8eT80wWS7fi/DgNy1uXeXRUJ1Wj0= +github.com/caddyserver/certmagic v0.15.3 h1:ScY3KVV1eMIUfW74i20kDnD4eWL8T0rG6S6Wnc6nc9U= +github.com/caddyserver/certmagic v0.15.3/go.mod h1:qhkAOthf72ufAcp3Y5jF2RaGE96oip3UbEQRIzwe3/8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -86,8 +92,11 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -95,8 +104,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/digitalocean/godo v1.41.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU= -github.com/digitalocean/godo v1.69.1 h1:aCyfwth8R3DeOaWB9J9E8v7cjlDIlF19eXTt8R3XhTE= -github.com/digitalocean/godo v1.69.1/go.mod h1:epPuOzTOOJujNo0nduDj2D5O1zu8cSpp9R+DdN0W9I0= +github.com/digitalocean/godo v1.75.0 h1:UijUv60I095CqJqGKdjY2RTPnnIa4iFddmq+1wfyS4Y= +github.com/digitalocean/godo v1.75.0/go.mod h1:GBmu8MkjZmNARE7IXRPmkbbnocNN8+uBm0xbEVw2LCs= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/emersion/go-imap v1.0.0-beta.4.0.20190504114255-4d5af3d05147/go.mod h1:mOPegfAgLVXbhRm1bh2JTX08z2Y3HYmKYpbrKDeAzsQ= @@ -166,8 +175,8 @@ github.com/foxcpp/go-imap-namespace v0.0.0-20200722130255-93092adf35f1/go.mod h1 github.com/foxcpp/go-imap-sql v0.5.1-0.20210828123943-f74ead8f06cd h1:4vpPV74xAqiJD6AVGIK6jucz/Frq70sYRcOAU5FLz6I= github.com/foxcpp/go-imap-sql v0.5.1-0.20210828123943-f74ead8f06cd/go.mod h1:1dHCAq3XRkYRwTDOtL/vCgvvQ13gLqNt2+nLjL1UHyk= github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= -github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897 h1:E52jfcE64UG42SwLmrW0QByONfGynWuzBvm86BoB9z8= -github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= +github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= +github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 h1:k8w0iy6GP9oeSZWUH3p2DqZHaXDKZGNs3NZGZMGfQHc= github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8/go.mod h1:HO1YOCbBM8KjpgThMMFejHx6K/UsnEv2Oh9YGtBIlOU= github.com/frankban/quicktest v1.5.0 h1:Tb4jWdSpdjKzTUicPnY61PZxKbDoGa7ABbrReT3gQVY= @@ -182,13 +191,12 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-ldap/ldap/v3 v3.4.1 h1:fU/0xli6HY02ocbMuozHAYsaHLcnkLjvho2r5a34BUU= -github.com/go-ldap/ldap/v3 v3.4.1/go.mod h1:iYS1MdmrmceOJ1QOTnRXrIs7i3kloqtmGQjRvjKpyMg= +github.com/go-ldap/ldap/v3 v3.4.2 h1:zFZKcXKLqZpFMrMQGHeHWKXbDTdNCmhGY9AK41zPh+8= +github.com/go-ldap/ldap/v3 v3.4.2/go.mod h1:iYS1MdmrmceOJ1QOTnRXrIs7i3kloqtmGQjRvjKpyMg= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -241,8 +249,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= @@ -285,8 +294,6 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -294,7 +301,6 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -316,16 +322,17 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.0 h1:xqfchp4whNFxn5A4XFyyYtitiWI8Hy5EW59jEwcyL6U= +github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.11 h1:i2lw1Pm7Yi/4O6XCSyJWqEHI2MDw2FzUK6o/D21xn2A= +github.com/klauspost/cpuid/v2 v2.0.11/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -335,8 +342,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.4.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.3 h1:v9QZf2Sn6AmjXtQeFpdoq/eaNtYP6IN+7lcrygsIAtg= -github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= +github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libdns/alidns v1.0.2 h1:WiT1cO2LWY95YNocTVBGipHjvRaFQOxMQ9X5bTiryRo= github.com/libdns/alidns v1.0.2/go.mod h1:e18uAG6GanfRhcJj6/tps2rCMzQJaYVcGKT+ELjdjGE= github.com/libdns/cloudflare v0.1.0 h1:93WkJaGaiXCe353LHEP36kAWCUw0YjFqwhkBkU2/iic= @@ -358,14 +365,14 @@ github.com/libdns/libdns v0.2.1 h1:Wu59T7wSHRgtA0cfxC+n1c/e+O3upJGWytknkmFEDis= github.com/libdns/libdns v0.2.1/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40= github.com/libdns/metaname v0.3.0 h1:HJudLYthdv52TupOPczojip/nEQHW7xqk5+whGReva4= github.com/libdns/metaname v0.3.0/go.mod h1:a3hqEgj59tjWaWlF4WxQGhvMVtjz1E4Ngs1GfVS+VhQ= -github.com/libdns/namecheap v0.0.0-20210820020909-5f694e73b00f h1:EW/KOX+ys3exdEPHpzsXQ86XY+UyVZUYz9Bd+ilOEfA= -github.com/libdns/namecheap v0.0.0-20210820020909-5f694e73b00f/go.mod h1:dED6sMLZxIcilF1GjrcpwgVoCglXGMn86irqQzRhqRY= +github.com/libdns/namecheap v0.0.0-20211109042440-fc7440785c8e h1:WCcKyxiiK/sJnST1ulVBKNg4J8luCYDdgUrp2ySMO2s= +github.com/libdns/namecheap v0.0.0-20211109042440-fc7440785c8e/go.mod h1:dED6sMLZxIcilF1GjrcpwgVoCglXGMn86irqQzRhqRY= github.com/libdns/namedotcom v0.3.3 h1:R10C7+IqQGVeC4opHHMiFNBxdNBg1bi65ZwqLESl+jE= github.com/libdns/namedotcom v0.3.3/go.mod h1:GbYzsAF2yRUpI0WgIK5fs5UX+kDVUPaYCFLpTnKQm0s= -github.com/libdns/route53 v1.1.1 h1:p9TC3KAewPraYB+AzbiS+9Ne1wwGa6JyQCBWPS2PiTo= -github.com/libdns/route53 v1.1.1/go.mod h1:/uF0yuPxneTh3+WPLn8HoNElx3PJsBdxpuNhEFkM+4w= -github.com/libdns/vultr v0.0.0-20201128180404-1d5ee21ea62f h1:i65uWz6ebW7T8bMqnJhzwj1B0HYB8mg/GXueGPxLrOs= -github.com/libdns/vultr v0.0.0-20201128180404-1d5ee21ea62f/go.mod h1:T6u+iQbIf9wAQRE+MLDBHg0Xtjz2eWR1RTM1VbbDf1o= +github.com/libdns/route53 v1.1.2 h1:etUVkopzG9xGEt34xfmYbpz6rTgAnv+n0vcV/1Xdc7c= +github.com/libdns/route53 v1.1.2/go.mod h1:sSTy167w3QYL2Xn8ksdAT4WHTZQcX6XTbKhLhUCT4cc= +github.com/libdns/vultr v0.0.0-20211122184636-cd4cb5c12e51 h1:ds9Nu9RwQWIHXM/e7264RiUfdyAgNdoZkiWXt0xSIzY= +github.com/libdns/vultr v0.0.0-20211122184636-cd4cb5c12e51/go.mod h1:HXpNE79BzPq3UumCELwGB7E9HD9Ie10D2o3e56CGkdE= github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= @@ -376,18 +383,19 @@ github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJK github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mholt/acmez v1.0.0 h1:ZAdWrilnq41HTlUO0vMJ6C+z8ZvzQ9I2LR1/Bo+137U= -github.com/mholt/acmez v1.0.0/go.mod h1:8qnn8QA/Ewx8E3ZSsmscqsIjhhpxuy9vqdgbX2ceceM= +github.com/mholt/acmez v1.0.1/go.mod h1:8qnn8QA/Ewx8E3ZSsmscqsIjhhpxuy9vqdgbX2ceceM= +github.com/mholt/acmez v1.0.2 h1:C8wsEBIUVi6e0DYoxqCcFuXtwc4AWXL/jgcDjF7mjVo= +github.com/mholt/acmez v1.0.2/go.mod h1:8qnn8QA/Ewx8E3ZSsmscqsIjhhpxuy9vqdgbX2ceceM= github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.42/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/dns v1.1.46 h1:uzwpxRtSVxtcIZmz/4Uz6/Rn7G11DvsaslXoy5LxQio= +github.com/miekg/dns v1.1.46/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.14 h1:T7cw8P586gVwEEd0y21kTYtloD576XZgP62N8pE130s= -github.com/minio/minio-go/v7 v7.0.14/go.mod h1:S23iSP5/gbMwtxeY5FM71R+TkAYyzEdoNEDDwpt8yWs= +github.com/minio/minio-go/v7 v7.0.23 h1:NleyGQvAn9VQMU+YHVrgV4CX+EPtxPt/78lHOOTncy4= +github.com/minio/minio-go/v7 v7.0.23/go.mod h1:ei5JjmxwHaMrgsMrn4U/+Nmg+d8MKS1U2DAn1ou4+Do= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= @@ -414,8 +422,9 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -424,8 +433,8 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.31.1 h1:d18hG4PkHnNAKNMOmFuXFaiY8Us0nird/2m60uS1AMs= -github.com/prometheus/common v0.31.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= @@ -466,14 +475,15 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU= github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/vultr/govultr/v2 v2.0.0/go.mod h1:2PsEeg+gs3p/Fo5Pw8F9mv+DUBEOlrNZ8GmCTGmhOhs= -github.com/vultr/govultr/v2 v2.9.0 h1:n0a0fGOiHAE07twu1VR3jWTDFDE0+DJ/cIqZqX9IlNw= -github.com/vultr/govultr/v2 v2.9.0/go.mod h1:JjUljQdSZx+MELCAJvZ/JH32bJotmflnsyS0NOjb8Jg= +github.com/vultr/govultr/v2 v2.11.0/go.mod h1:JjUljQdSZx+MELCAJvZ/JH32bJotmflnsyS0NOjb8Jg= +github.com/vultr/govultr/v2 v2.14.1 h1:Z4nd9mXNQ5wd63aw0MZOalFeTkJ8L6Sed3PTqagp4TA= +github.com/vultr/govultr/v2 v2.14.1/go.mod h1:JjUljQdSZx+MELCAJvZ/JH32bJotmflnsyS0NOjb8Jg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -488,17 +498,17 @@ go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -511,8 +521,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -548,8 +558,9 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -589,10 +600,16 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0 h1:qOfNqBm5gk93LjGZo1MJaKY6Bph39zOKz1Hz2ogHj1w= -golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211118161319-6a13c67c3ce4/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -609,8 +626,9 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 h1:B333XXssMuKQeBwiNODx4TupZy7bf4sxFZnN2ZOcvUE= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -683,11 +701,18 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac h1:oN6lz7iLW/YC7un8pq+9bOLyXrprv2+DKfkJY+2LJJw= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -757,8 +782,10 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -794,8 +821,11 @@ google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6 google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.58.0 h1:MDkAbYIB1JpSgCTOCYYoIec/coMlKK4oVbpnBLLcyT0= -google.golang.org/api v0.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3lv+E= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0 h1:67zQnAE0T2rB0A3CwLSas0K+SbVzSxP+zTLkQLexeiw= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -862,10 +892,17 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e h1:B3r2Cb5u7Od6/WGb95VHDMp99VU/fuqPYZb6VM8IozI= -google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 h1:U9V52f6rAgINH7kT+musA1qF8kWyVOxzF8eYuOVuFwQ= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -891,8 +928,9 @@ google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -915,8 +953,8 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogR gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.63.2 h1:tGK/CyBg7SMzb60vP1M03vNZ3VDu3wGQJwn7Sxi9r3c= -gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 211e1a67ee9d65bea7c34346eb7affb639f9d22a Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sun, 6 Mar 2022 16:33:24 +0300 Subject: [PATCH 05/45] maddy 0.5.4 --- .version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.version b/.version index be14282..7d85683 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -0.5.3 +0.5.4 From 4b1c4f932a38557fbb0adeab9f8d28ec672216ca Mon Sep 17 00:00:00 2001 From: ptrcnull Date: Tue, 15 Mar 2022 00:14:13 +0100 Subject: [PATCH 06/45] tls/acme: set default hostname --- internal/tls/acme/acme.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/tls/acme/acme.go b/internal/tls/acme/acme.go index 556e637..65f9e7c 100644 --- a/internal/tls/acme/acme.go +++ b/internal/tls/acme/acme.go @@ -90,6 +90,7 @@ func (l *Loader) Init(cfg *config.Map) error { l.cfg = certmagic.New(l.cache, certmagic.Config{ Storage: l.store, // not sure if it is necessary to set these twice Logger: cmLog, + DefaultServerName: hostname, }) mngr := certmagic.NewACMEManager(l.cfg, certmagic.ACMEManager{ Logger: cmLog, From c9c856ffb6fbe054165acc5e4748df38cd900211 Mon Sep 17 00:00:00 2001 From: ptrcnull Date: Sun, 24 Apr 2022 03:44:23 +0200 Subject: [PATCH 07/45] Move closing the default logger after printing configuration errors --- maddy.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maddy.go b/maddy.go index 43df3db..94aa960 100644 --- a/maddy.go +++ b/maddy.go @@ -161,6 +161,8 @@ func Run() int { return 2 } + defer log.DefaultLogger.Out.Close() + if err := moduleMain(cfg); err != nil { systemdStatusErr(err) log.Println(err) @@ -271,8 +273,6 @@ func moduleMain(cfg []config.Node) error { return err } - defer log.DefaultLogger.Out.Close() - hooks.AddHook(hooks.EventLogRotate, reinitLogging) endpoints, mods, err := RegisterModules(globals, modBlocks) From ccaad967f2e33b75ac8943e863956e8eba9f9237 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 18 Jun 2022 18:11:44 +0300 Subject: [PATCH 08/45] Delete FUNDING.yml Due to... political situation, donations are no longer accepted and foxcpp.dev is dead for good anyway. --- .github/FUNDING.yml | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 8a28a4d..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -custom: "https://foxcpp.dev/donate" -liberapay: foxcpp From dab36e41a7b9da05d1190ef484542c81e8e9771e Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 18 Jun 2022 18:47:08 +0300 Subject: [PATCH 09/45] docs: Update internals/ to not mention quirks of go-imap v1 --- docs/internals/quirks.md | 9 +-------- docs/internals/specifications.md | 4 +--- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/docs/internals/quirks.md b/docs/internals/quirks.md index d4f0019..bc343cc 100644 --- a/docs/internals/quirks.md +++ b/docs/internals/quirks.md @@ -14,17 +14,10 @@ interoperability. ### `sql` -- `\Recent` flag is not implemented and it always set. +- `\Recent` flag is not reset in all cases. This _does not_ break [RFC 3501]. Clients relying on it will work (much) less efficiently. -- Sequence numbers don't stay consistent between SELECT/CHECK commands. - - This _does not_ break [RFC 3501] which is unclear about synchronization - issues, however it deviates from behavior implemented by most servers. This - can lead to operations applied to the wrong messages if sequence numbers are - used by multiple clients connected at the same time. - [RFC 2821]: https://tools.ietf.org/html/rfc2821 [RFC 3501]: https://tools.ietf.org/html/rfc3501 diff --git a/docs/internals/specifications.md b/docs/internals/specifications.md index c27217d..c042cab 100644 --- a/docs/internals/specifications.md +++ b/docs/internals/specifications.md @@ -20,9 +20,7 @@ maddy along with any known deviations. ## IMAP - [RFC 3501] - Internet Message Access Protocol - Version 4rev1 - * **Broken**: Unilateral updates are sent immedately, sequence numbers are not frozen. - [GH 188] - * **Partial**: `\Recent` flag is not implemented. + * **Partial**: `\Recent` flag is not reset sometimes. - [RFC 2152] - UTF-7 ### Extensions From cc92db42fcd9b801ed88faa497afdceac780812a Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 18 Jun 2022 18:47:29 +0300 Subject: [PATCH 10/45] ci: Use docker buildx and qemu to build ARM64 images --- .github/workflows/cicd.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index f10d48c..369360a 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -90,6 +90,13 @@ jobs: if: github.ref_type == 'tag' runs-on: ubuntu-latest steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + with: + platforms: arm64 + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1 - name: "Login to Docker Hub" uses: docker/login-action@v1 with: @@ -105,6 +112,7 @@ jobs: uses: docker/build-push-action@v2 with: context: . + platforms: linux/amd64,linux/arm64/v8 push: true tags: | foxcpp/maddy:${{ github.ref_name }} From 3c28e3e376b679c31b015e2dd361fccca57cb7a3 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 18 Jun 2022 18:48:27 +0300 Subject: [PATCH 11/45] Remove unnecessary multiarch build scripts --- docker-build-multiarch.sh | 37 ------------------------------------- multiarch/README.md | 15 --------------- multiarch/buildkitd.toml | 7 ------- 3 files changed, 59 deletions(-) delete mode 100755 docker-build-multiarch.sh delete mode 100644 multiarch/README.md delete mode 100644 multiarch/buildkitd.toml diff --git a/docker-build-multiarch.sh b/docker-build-multiarch.sh deleted file mode 100755 index cd7bb60..0000000 --- a/docker-build-multiarch.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -set -eEuo pipefail - -AMD64_DOCKER_HOST=${AMD64_DOCKER_HOST:-"unix:///var/run/docker.sock"} -ARM_DOCKER_HOST=${ARM_DOCKER_HOST:-"tcp://raspberrypi.local:2375"} - -if [ ! -x ${HOME}/.docker/cli-plugins/docker-buildx ]; then - mkdir -p ${HOME}/.docker/cli-plugins/ - wget https://github.com/docker/buildx/releases/download/v0.7.0/buildx-v0.7.0.linux-amd64 -O ${HOME}/.docker/cli-plugins/docker-buildx - chmod +x ${HOME}/.docker/cli-plugins/docker-buildx -fi - -docker buildx version - -BUILDER="multiarch-builder" -CONFIG=${PWD}/multiarch/buildkitd.toml -docker buildx create --name ${BUILDER} --buildkitd-flags '--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host' --config=${CONFIG} --driver=docker-container --driver-opt image=moby/buildkit:latest,network=host --platform=linux/amd64 --use ${AMD64_DOCKER_HOST} -docker buildx create --name ${BUILDER} --buildkitd-flags '--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host' --config=${CONFIG} --driver=docker-container --driver-opt image=moby/buildkit:latest,network=host --platform=linux/arm64,linux/arm/v7,linux/arm/v6 --append ${ARM_DOCKER_HOST} -stopbuilders() { - set +x - echo stopping builders - docker buildx stop ${BUILDER} - docker buildx rm ${BUILDER} -} -trap stopbuilders INT TERM EXIT - -docker buildx inspect --bootstrap --builder=${BUILDER} - -PLATFORM="${PLATFORM:-"linux/amd64,linux/arm/v7,linux/arm64"}" - -docker --log-level=debug \ - buildx build ${PWD} \ - --builder=${BUILDER} \ - --allow security.insecure \ - --platform=${PLATFORM} \ - $@ \ No newline at end of file diff --git a/multiarch/README.md b/multiarch/README.md deleted file mode 100644 index 5accdf3..0000000 --- a/multiarch/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Mutliarch builds - -## Requirements - -An ARM64 server with docker daemon exposed (for example, a raspberry pi 4 with Raspberry Pi OS 64bits) - -## Build - -At repository root, launch : - -``` -./docker-build-multiarch.sh --tag=TAG --push -``` - -It will build and push multi-arch docker images as TAG. diff --git a/multiarch/buildkitd.toml b/multiarch/buildkitd.toml deleted file mode 100644 index becff42..0000000 --- a/multiarch/buildkitd.toml +++ /dev/null @@ -1,7 +0,0 @@ -################### -## https://github.com/moby/buildkit/blob/master/docs/buildkitd.toml.md - -debug = true - -# insecure-entitlements allows insecure entitlements, disabled by default. -insecure-entitlements = [ "network.host", "security.insecure" ] From 6fdafbc12355dc62f15b33946eabfac8d6937eba Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 18 Jun 2022 19:15:09 +0300 Subject: [PATCH 12/45] check/spf: Ignore SPF permerr and temperr by default See #485. --- go.mod | 2 +- go.sum | 12 ------------ internal/check/spf/spf.go | 4 ++-- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 30f2117..f7b1b31 100644 --- a/go.mod +++ b/go.mod @@ -58,8 +58,8 @@ require ( github.com/pierrec/lz4 v2.6.1+incompatible // indirect github.com/prometheus/client_golang v1.12.1 github.com/rs/xid v1.3.0 // indirect - github.com/vultr/govultr/v2 v2.14.1 // indirect github.com/urfave/cli/v2 v2.3.0 + github.com/vultr/govultr/v2 v2.14.1 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.21.0 diff --git a/go.sum b/go.sum index 68a606d..218f201 100644 --- a/go.sum +++ b/go.sum @@ -128,8 +128,6 @@ github.com/emersion/go-sasl v0.0.0-20191210011802-430746ea8b9b/go.mod h1:G/dpzLu github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= github.com/emersion/go-sasl v0.0.0-20211008083017-0b9dcfb154ac h1:tn/OQ2PmwQ0XFVgAHfjlLyqMewry25Rz7jWnVoh4Ggs= github.com/emersion/go-sasl v0.0.0-20211008083017-0b9dcfb154ac/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= -github.com/emersion/go-smtp v0.15.1-0.20211006082444-62f6b38f85e4 h1:6unG0XYwWUlJjsbYDI06qcRH5Fe0o978bgL8zNydJ8k= -github.com/emersion/go-smtp v0.15.1-0.20211006082444-62f6b38f85e4/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= github.com/emersion/go-smtp v0.15.1-0.20220119142625-1c322d2783aa h1:PZiDDRpQS7p6nFZFt9Pbco8a5FYa5kMhu6V7fTsYE4k= github.com/emersion/go-smtp v0.15.1-0.20220119142625-1c322d2783aa/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= github.com/emersion/go-textwrapper v0.0.0-20160606182133-d0e65e56babe/go.mod h1:aqO8z8wPrjkscevZJFVE1wXJrLpC5LtJG7fqLOsPb2U= @@ -161,8 +159,6 @@ github.com/foxcpp/go-imap-sql v0.5.1-0.20220105233636-946daf36ce81/go.mod h1:tl6 github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15 h1:nLPjjvpUAODOR6vY/7o0hBIk8iTr19Fvmf8aFx/kC7A= github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= -github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= -github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 h1:k8w0iy6GP9oeSZWUH3p2DqZHaXDKZGNs3NZGZMGfQHc= github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8/go.mod h1:HO1YOCbBM8KjpgThMMFejHx6K/UsnEv2Oh9YGtBIlOU= github.com/frankban/quicktest v1.5.0 h1:Tb4jWdSpdjKzTUicPnY61PZxKbDoGa7ABbrReT3gQVY= @@ -372,9 +368,6 @@ github.com/mholt/acmez v1.0.1/go.mod h1:8qnn8QA/Ewx8E3ZSsmscqsIjhhpxuy9vqdgbX2ce github.com/mholt/acmez v1.0.2 h1:C8wsEBIUVi6e0DYoxqCcFuXtwc4AWXL/jgcDjF7mjVo= github.com/mholt/acmez v1.0.2/go.mod h1:8qnn8QA/Ewx8E3ZSsmscqsIjhhpxuy9vqdgbX2ceceM= github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.42/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= github.com/miekg/dns v1.1.46 h1:uzwpxRtSVxtcIZmz/4Uz6/Rn7G11DvsaslXoy5LxQio= github.com/miekg/dns v1.1.46/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= @@ -461,13 +454,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU= -github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/vultr/govultr/v2 v2.0.0/go.mod h1:2PsEeg+gs3p/Fo5Pw8F9mv+DUBEOlrNZ8GmCTGmhOhs= -github.com/vultr/govultr/v2 v2.9.0 h1:n0a0fGOiHAE07twu1VR3jWTDFDE0+DJ/cIqZqX9IlNw= -github.com/vultr/govultr/v2 v2.9.0/go.mod h1:JjUljQdSZx+MELCAJvZ/JH32bJotmflnsyS0NOjb8Jg= github.com/vultr/govultr/v2 v2.11.0/go.mod h1:JjUljQdSZx+MELCAJvZ/JH32bJotmflnsyS0NOjb8Jg= github.com/vultr/govultr/v2 v2.14.1 h1:Z4nd9mXNQ5wd63aw0MZOalFeTkJ8L6Sed3PTqagp4TA= github.com/vultr/govultr/v2 v2.14.1/go.mod h1:JjUljQdSZx+MELCAJvZ/JH32bJotmflnsyS0NOjb8Jg= diff --git a/internal/check/spf/spf.go b/internal/check/spf/spf.go index 69781d3..783ef20 100644 --- a/internal/check/spf/spf.go +++ b/internal/check/spf/spf.go @@ -97,11 +97,11 @@ func (c *Check) Init(cfg *config.Map) error { }, modconfig.FailActionDirective, &c.softfailAction) cfg.Custom("permerr_action", false, false, func() (interface{}, error) { - return modconfig.FailAction{Reject: true}, nil + return modconfig.FailAction{}, nil }, modconfig.FailActionDirective, &c.permerrAction) cfg.Custom("temperr_action", false, false, func() (interface{}, error) { - return modconfig.FailAction{Reject: true}, nil + return modconfig.FailAction{}, nil }, modconfig.FailActionDirective, &c.temperrAction) _, err := cfg.Process() if err != nil { From f43b164170583917577f374d8ef9cc1d447e86ce Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 18 Jun 2022 19:18:17 +0300 Subject: [PATCH 13/45] modify/dkim: Remove require_sender_match from code See #465. --- internal/modify/dkim/dkim.go | 12 ------------ internal/modify/dkim/dkim_test.go | 4 ---- 2 files changed, 16 deletions(-) diff --git a/internal/modify/dkim/dkim.go b/internal/modify/dkim/dkim.go index 4623398..ffeed4a 100644 --- a/internal/modify/dkim/dkim.go +++ b/internal/modify/dkim/dkim.go @@ -105,7 +105,6 @@ type Modifier struct { bodyCanon dkim.Canonicalization sigExpiry time.Duration hash crypto.Hash - senderMatch map[string]struct{} multipleFromOk bool signSubdomains bool @@ -145,7 +144,6 @@ func (m *Modifier) Init(cfg *config.Map) error { hashName string keyPathTemplate string newKeyAlgo string - senderMatch []string ) cfg.Bool("debug", true, false, &m.log.Debug) @@ -165,8 +163,6 @@ func (m *Modifier) Init(cfg *config.Map) error { []string{"sha256"}, "sha256", &hashName) cfg.Enum("newkey_algo", false, false, []string{"rsa4096", "rsa2048", "ed25519"}, "rsa2048", &newKeyAlgo) - cfg.EnumList("require_sender_match", false, false, - []string{"envelope", "auth_domain", "auth_user", "off"}, []string{"envelope", "auth"}, &senderMatch) cfg.Bool("allow_multiple_from", false, false, &m.multipleFromOk) cfg.Bool("sign_subdomains", false, false, &m.signSubdomains) @@ -184,14 +180,6 @@ func (m *Modifier) Init(cfg *config.Map) error { return errors.New("sign_domain: only one domain is supported when sign_subdomains is enabled") } - m.senderMatch = make(map[string]struct{}, len(senderMatch)) - for _, method := range senderMatch { - m.senderMatch[method] = struct{}{} - } - if _, off := m.senderMatch["off"]; off && len(senderMatch) != 1 { - return errors.New("sign_domain: require_sender_match: 'off' should not be combined with other methods") - } - m.hash = hashFuncs[hashName] if m.hash == 0 { panic("modify.dkim.Init: Hash function allowed by config matcher but not present in hashFuncs") diff --git a/internal/modify/dkim/dkim_test.go b/internal/modify/dkim/dkim_test.go index 2fe9c3e..6b6cda2 100644 --- a/internal/modify/dkim/dkim_test.go +++ b/internal/modify/dkim/dkim_test.go @@ -59,10 +59,6 @@ func newTestModifier(t *testing.T, dir, keyAlgo string, domains []string) *Modif Name: "key_path", Args: []string{filepath.Join(dir, "{domain}.key")}, }, - { - Name: "require_sender_match", - Args: []string{"off"}, - }, { Name: "newkey_algo", Args: []string{keyAlgo}, From 9dd34b85efd07f7c6a052d05033b310903e27763 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 18 Jun 2022 19:26:48 +0300 Subject: [PATCH 14/45] check: Remove require_matching_echo See #280. --- docs/reference/smtp-pipeline.md | 13 ++--- internal/check/dns/dns.go | 84 --------------------------------- 2 files changed, 7 insertions(+), 90 deletions(-) diff --git a/docs/reference/smtp-pipeline.md b/docs/reference/smtp-pipeline.md index a86ef42..728bab1 100644 --- a/docs/reference/smtp-pipeline.md +++ b/docs/reference/smtp-pipeline.md @@ -86,7 +86,7 @@ Complete configuration example using all of the mentioned directives: check { # Run a check to make sure source SMTP server identification # is legit. - require_matching_ehlo + spf } # Messages coming from senders at example.org will be handled in @@ -129,12 +129,12 @@ Example: ``` check { # Reference implicitly defined default configuration for check. - require_matching_ehlo + spf # Inline definition of custom config. - require_source_mx { - # Configuration for require_source_mx goes here. - fail_action reject + spf { + # Configuration for spf goes here. + permerr_action reject } } ``` @@ -143,7 +143,8 @@ It is also possible to define the block of checks at the top level as "checks" module and reference it using & syntax. Example: ``` checks inbound_checks { - require_matching_ehlo + spf + dkim } # ... somewhere else ... diff --git a/internal/check/dns/dns.go b/internal/check/dns/dns.go index 01b75b3..80c89ed 100644 --- a/internal/check/dns/dns.go +++ b/internal/check/dns/dns.go @@ -19,7 +19,6 @@ along with this program. If not, see . package dns import ( - "net" "strings" "github.com/foxcpp/maddy/framework/address" @@ -156,92 +155,9 @@ func requireMXRecord(ctx check.StatelessCheckContext, mailFrom string) module.Ch return module.CheckResult{} } - -func requireMatchingEHLO(ctx check.StatelessCheckContext) module.CheckResult { - ctx.Logger.Printf("require_matching_echo is deprecated and will be removed in the next release") - - if ctx.MsgMeta.Conn == nil { - ctx.Logger.Printf("locally-generated message, skipping") - return module.CheckResult{} - } - - tcpAddr, ok := ctx.MsgMeta.Conn.RemoteAddr.(*net.TCPAddr) - if !ok { - ctx.Logger.Printf("non-TCP/IP source, skipped") - return module.CheckResult{} - } - - ehlo := ctx.MsgMeta.Conn.Hostname - - if strings.HasPrefix(ehlo, "[") && strings.HasSuffix(ehlo, "]") { - // IP in EHLO, checking against source IP directly. - - ehlo = ehlo[1 : len(ehlo)-1] - ehlo = strings.TrimPrefix(ehlo, "IPv6:") - ehloIP := net.ParseIP(ehlo) - - if ehloIP == nil { - return module.CheckResult{ - Reason: &exterrors.SMTPError{ - Code: 550, - EnhancedCode: exterrors.EnhancedCode{5, 7, 0}, - Message: "Malformed IP in EHLO", - CheckName: "require_matching_ehlo", - }, - } - } - - if !ehloIP.Equal(tcpAddr.IP) { - return module.CheckResult{ - Reason: &exterrors.SMTPError{ - Code: 550, - EnhancedCode: exterrors.EnhancedCode{5, 7, 0}, - Message: "IP in EHLO is not the same as the actual client IP", - CheckName: "require_matching_ehlo", - }, - } - } - - return module.CheckResult{} - } - - srcIPs, err := ctx.Resolver.LookupIPAddr(ctx, dns.FQDN(ehlo)) - if err != nil { - reason, misc := exterrors.UnwrapDNSErr(err) - return module.CheckResult{ - Reason: &exterrors.SMTPError{ - Code: exterrors.SMTPCode(err, 450, 550), - EnhancedCode: exterrors.SMTPEnchCode(err, exterrors.EnhancedCode{0, 7, 0}), - Message: "DNS error during policy check", - CheckName: "require_matching_ehlo", - Err: err, - Reason: reason, - Misc: misc, - }, - } - } - - for _, ip := range srcIPs { - if tcpAddr.IP.Equal(ip.IP) { - ctx.Logger.Debugf("A/AAA record found for %s for %s domain", tcpAddr.IP, ehlo) - return module.CheckResult{} - } - } - return module.CheckResult{ - Reason: &exterrors.SMTPError{ - Code: 550, - EnhancedCode: exterrors.EnhancedCode{5, 7, 0}, - Message: "No matching A/AAA records found for the EHLO hostname", - CheckName: "require_matching_ehlo", - }, - } -} - func init() { check.RegisterStatelessCheck("require_matching_rdns", modconfig.FailAction{Quarantine: true}, requireMatchingRDNS, nil, nil, nil) check.RegisterStatelessCheck("require_mx_record", modconfig.FailAction{Quarantine: true}, nil, requireMXRecord, nil, nil) - check.RegisterStatelessCheck("require_matching_ehlo", modconfig.FailAction{Quarantine: true}, - requireMatchingEHLO, nil, nil, nil) } From 2037b05daeb1e9b4d4de512e9620bf5f25c18f66 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 18 Jun 2022 23:41:43 +0300 Subject: [PATCH 15/45] Improve Docker image * Use TLS filenames same as certbot (see #350). * Put the Docker-specific maddy.conf in the repo (see #350). * Set OCI labels for the image in CI * Move Docker-specific documentation from Docker Hub into docs/ * Add .dockerignore --- .dockerignore | 4 + .github/workflows/cicd.yml | 29 ++++-- .mkdocs.yml | 1 + Dockerfile | 31 +++---- docs/docker.md | 75 +++++++++++++++ maddy.conf | 5 +- maddy.conf.docker | 182 +++++++++++++++++++++++++++++++++++++ 7 files changed, 297 insertions(+), 30 deletions(-) create mode 100644 .dockerignore create mode 100644 docs/docker.md create mode 100644 maddy.conf.docker diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ef99e5a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +testdata/ +cmd/maddy/maddy +maddy +tests/maddy.cover diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 369360a..dae44f2 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -85,16 +85,16 @@ jobs: path: '~/maddy-x86_64-linux-musl.tar.zst' if-no-files-found: error docker-builder: - name: "Build Docker image" - needs: build-and-test + name: "Build & push Docker image" + needs: build-and-test # Upload if: github.ref_type == 'tag' runs-on: ubuntu-latest steps: - - name: Set up QEMU + - name: "Set up QEMU" uses: docker/setup-qemu-action@v1 with: platforms: arm64 - - name: Set up Docker Buildx + - name: "Set up Docker Buildx" id: buildx uses: docker/setup-buildx-action@v1 - name: "Login to Docker Hub" @@ -108,13 +108,24 @@ jobs: registry: "ghcr.io" username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} + - name: "Generate container metadata" + uses: docker/metadata-action@v4 + with: + images: | + foxcpp/maddy + ghcr.io/foxcpp/maddy + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + labels: | + org.opencontainers.image.title=Maddy Mail Server + org.opencontainers.image.documentation=https://maddy.email/docker/ + org.opencontainers.image.url=https://maddy.email - name: "Build and push" uses: docker/build-push-action@v2 with: context: . - platforms: linux/amd64,linux/arm64/v8 + platforms: linux/amd64,linux/arm64 push: true - tags: | - foxcpp/maddy:${{ github.ref_name }} - ghcr.io/foxcpp/maddy:${{ github.ref_name }} - + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.mkdocs.yml b/.mkdocs.yml index 189eba5..9c352e8 100644 --- a/.mkdocs.yml +++ b/.mkdocs.yml @@ -19,6 +19,7 @@ nav: - multiple-domains.md - upgrading.md - seclevels.md + - docker.md - Reference manual: - reference/modules.md - reference/global-config.md diff --git a/Dockerfile b/Dockerfile index a94efaf..c760ec0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,33 +1,30 @@ FROM golang:1.17-alpine AS build-env -RUN set -ex ;\ - apk upgrade --no-cache --available ;\ - apk add --no-cache bash git build-base +RUN set -ex && \ + apk upgrade --no-cache --available && \ + apk add --no-cache build-base WORKDIR /maddy -ADD go.mod go.sum ./ -ENV LDFLAGS -static + +COPY go.mod go.sum ./ RUN go mod download -ADD . ./ -RUN mkdir -p /pkg/data -COPY maddy.conf /pkg/data/maddy.conf -# Monkey-patch config to use environment. -RUN sed -Ei 's!\$\(hostname\) = .+!$(hostname) = {env:MADDY_HOSTNAME}!' /pkg/data/maddy.conf -RUN sed -Ei 's!\$\(primary_domain\) = .+!$(primary_domain) = {env:MADDY_DOMAIN}!' /pkg/data/maddy.conf -RUN sed -Ei 's!^tls .+!tls file /data/tls_cert.pem /data/tls_key.pem!' /pkg/data/maddy.conf -RUN ./build.sh --builddir /tmp --destdir /pkg/ --tags docker build install +COPY . ./ +RUN mkdir -p /pkg/data && \ + cp maddy.conf.docker /pkg/data/maddy.conf && \ + ./build.sh --builddir /tmp --destdir /pkg/ --tags docker build install -FROM alpine:3.15.0 +FROM alpine:3.16.0 LABEL maintainer="fox.cpp@disroot.org" LABEL org.opencontainers.image.source=https://github.com/foxcpp/maddy -RUN set -ex ;\ - apk upgrade --no-cache --available ;\ +RUN set -ex && \ + apk upgrade --no-cache --available && \ apk --no-cache add ca-certificates COPY --from=build-env /pkg/data/maddy.conf /data/maddy.conf COPY --from=build-env /pkg/usr/local/bin/maddy /pkg/usr/local/bin/maddyctl /bin/ EXPOSE 25 143 993 587 465 VOLUME ["/data"] -ENTRYPOINT ["/bin/maddy", "-config", "/data/maddy.conf", "run"] +ENTRYPOINT ["/bin/maddy", "-config", "/data/maddy.conf"] +CMD ["run"] diff --git a/docs/docker.md b/docs/docker.md new file mode 100644 index 0000000..36b18c3 --- /dev/null +++ b/docs/docker.md @@ -0,0 +1,75 @@ +# Docker + +Official Docker image is available from Docker Hub. + +It expects configuration file to be available at /data/maddy.conf. + +If /data is a Docker volume, then default configuration will be placed there +automatically. If it is used, then MADDY_HOSTNAME, MADDY_DOMAIN environment +variables control the host name and primary domain for the server. TLS +certificate should be placed in /data/tls/fullchain.pem, private key in +/data/tls/privkey.pem + +DKIM keys are generated in /data/dkim_keys directory. + +## Image tags + +- `latest` - A latest stable release. May contain breaking changes. +- `X.Y` - A specific feature branch, it is recommended to use these tags to + receive bugfixes without the risk of feature-related regressions or breaking + changes. +- `X.Y.Z` - A specific stable release + +## Ports + +All standard ports, as described in maddy docs. + +- `25` - SMTP inbound port. +- `465`, `587` - SMTP Submission ports +- `993`, `143` - IMAP4 ports + +## Volumes + +`/data` - maddy state directory. Databases, queues, etc are stored here. You +might want to mount a named volume there. The main configuration file is stored +here too (`/data/maddy.conf`). + +## Management utility + +To run management commands, create a temporary container with the same +/data directory and put the command after the image name, like this: + +``` +docker run --rm -it -v maddydata:/data foxcpp/maddy:0.6.0 creds create foxcpp@maddy.test +docker run --rm -it -v maddydata:/data foxcpp/maddy:0.6.0 imap-acct create foxcpp@maddy.test +``` + +Use the same image version as the running server. Things may break badly +otherwise. + +Note that, if you modify messages using maddyctl while the server is running - +you must ensure that /tmp from the server is accessible for the management +command. One way to it is to run it using `docker exec` instead of `docker run`: +``` +docker exec -it container_name_here maddy creds create foxcpp@maddy.test +``` + +## TL;DR + +``` +docker volume create maddydata +docker run \ + --name maddy \ + -e MADDY_HOSTNAME=mx.maddy.test \ + -e MADDY_DOMAIN=maddy.test \ + -v maddydata:/data \ + -p 25:25 \ + -p 143:143 \ + -p 587:587 \ + -p 993:993 \ + foxcpp/maddy:0.6 +``` + +It will fail on first startup. Copy TLS certificate to /data/tls/fullchain.pem +and key to /data/tls/privkey.pem. Run the server again. Finish DNS configuration +(DKIM keys, etc) as described in [tutorials/setting-up/](tutorials/setting-up/). \ No newline at end of file diff --git a/maddy.conf b/maddy.conf index 788c9d6..3e285a3 100644 --- a/maddy.conf +++ b/maddy.conf @@ -1,12 +1,9 @@ -## Maddy Mail Server - default configuration file (2021-08-16) +## Maddy Mail Server - default configuration file (2022-06-18) # Suitable for small-scale deployments. Uses its own format for local users DB, # should be managed via maddyctl utility. # # See tutorials at https://maddy.email for guidance on typical # configuration changes. -# -# See manual pages (also available at https://maddy.email) for reference -# documentation. # ---------------------------------------------------------------------------- # Base variables diff --git a/maddy.conf.docker b/maddy.conf.docker new file mode 100644 index 0000000..fd04e1a --- /dev/null +++ b/maddy.conf.docker @@ -0,0 +1,182 @@ +## Maddy Mail Server - default configuration file (2022-06-18) +## This is the copy of maddy.conf with changes necessary to run it in Docker. +# Suitable for small-scale deployments. Uses its own format for local users DB, +# should be managed via maddyctl utility. +# +# See tutorials at https://maddy.email for guidance on typical +# configuration changes. + +# ---------------------------------------------------------------------------- +# Base variables + +$(hostname) = {env:MADDY_HOSTNAME} +$(primary_domain) = {env:MADDY_DOMAIN} +$(local_domains) = $(primary_domain) + +tls file /data/tls/fullchain.pem /data/tls/privkey.pem + +# ---------------------------------------------------------------------------- +# Local storage & authentication + +# pass_table provides local hashed passwords storage for authentication of +# users. It can be configured to use any "table" module, in default +# configuration a table in SQLite DB is used. +# Table can be replaced to use e.g. a file for passwords. Or pass_table module +# can be replaced altogether to use some external source of credentials (e.g. +# PAM, /etc/shadow file). +# +# If table module supports it (sql_table does) - credentials can be managed +# using 'maddyctl creds' command. + +auth.pass_table local_authdb { + table sql_table { + driver sqlite3 + dsn credentials.db + table_name passwords + } +} + +# imapsql module stores all indexes and metadata necessary for IMAP using a +# relational database. It is used by IMAP endpoint for mailbox access and +# also by SMTP & Submission endpoints for delivery of local messages. +# +# IMAP accounts, mailboxes and all message metadata can be inspected using +# imap-* subcommands of maddyctl utility. + +storage.imapsql local_mailboxes { + driver sqlite3 + dsn imapsql.db +} + +# ---------------------------------------------------------------------------- +# SMTP endpoints + message routing + +hostname $(hostname) + +table.chain local_rewrites { + optional_step regexp "(.+)\+(.+)@(.+)" "$1@$3" + optional_step static { + entry postmaster postmaster@$(primary_domain) + } + optional_step file /etc/maddy/aliases +} + +msgpipeline local_routing { + # Insert handling for special-purpose local domains here. + # e.g. + # destination lists.example.org { + # deliver_to lmtp tcp://127.0.0.1:8024 + # } + + destination postmaster $(local_domains) { + modify { + replace_rcpt &local_rewrites + } + + deliver_to &local_mailboxes + } + + default_destination { + reject 550 5.1.1 "User doesn't exist" + } +} + +smtp tcp://0.0.0.0:25 { + limits { + # Up to 20 msgs/sec across max. 10 SMTP connections. + all rate 20 1s + all concurrency 10 + } + + dmarc yes + check { + require_mx_record + dkim + spf + } + + source $(local_domains) { + reject 501 5.1.8 "Use Submission for outgoing SMTP" + } + default_source { + destination postmaster $(local_domains) { + deliver_to &local_routing + } + default_destination { + reject 550 5.1.1 "User doesn't exist" + } + } +} + +submission tls://0.0.0.0:465 tcp://0.0.0.0:587 { + limits { + # Up to 50 msgs/sec across any amount of SMTP connections. + all rate 50 1s + } + + auth &local_authdb + + source $(local_domains) { + check { + authorize_sender { + prepare_email &local_rewrites + user_to_email identity + } + } + + destination postmaster $(local_domains) { + deliver_to &local_routing + } + default_destination { + modify { + dkim $(primary_domain) $(local_domains) default + } + deliver_to &remote_queue + } + } + default_source { + reject 501 5.1.8 "Non-local sender domain" + } +} + +target.remote outbound_delivery { + limits { + # Up to 20 msgs/sec across max. 10 SMTP connections + # for each recipient domain. + destination rate 20 1s + destination concurrency 10 + } + mx_auth { + dane + mtasts { + cache fs + fs_dir mtasts_cache/ + } + local_policy { + min_tls_level encrypted + min_mx_level none + } + } +} + +target.queue remote_queue { + target &outbound_delivery + + autogenerated_msg_domain $(primary_domain) + bounce { + destination postmaster $(local_domains) { + deliver_to &local_routing + } + default_destination { + reject 550 5.0.0 "Refusing to send DSNs to non-local addresses" + } + } +} + +# ---------------------------------------------------------------------------- +# IMAP endpoints + +imap tls://0.0.0.0:993 tcp://0.0.0.0:143 { + auth &local_authdb + storage &local_mailboxes +} From 6b6802bf2b1adced1046c1731dd17fcdf54d5919 Mon Sep 17 00:00:00 2001 From: bs2kbs2k <10294621+bs2kbs2k@users.noreply.github.com> Date: Wed, 22 Jun 2022 11:39:13 +0000 Subject: [PATCH 16/45] Fix issue with `maddyctl hash` --argon2-time set the memory instead of time due to a typo --- cmd/maddyctl/hash.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/maddyctl/hash.go b/cmd/maddyctl/hash.go index f4ce5f5..d0208eb 100644 --- a/cmd/maddyctl/hash.go +++ b/cmd/maddyctl/hash.go @@ -65,7 +65,7 @@ func hashCommand(ctx *cli.Context) error { opts.Argon2Memory = uint32(ctx.Int("argon2-memory")) } if ctx.IsSet("argon2-time") { - opts.Argon2Memory = uint32(ctx.Int("argon2-time")) + opts.Argon2Time = uint32(ctx.Int("argon2-time")) } if ctx.IsSet("argon2-threads") { opts.Argon2Threads = uint8(ctx.Int("argon2-threads")) From 6105f51b9b780f636d13f22e393caac7159d851c Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 12:29:12 +0300 Subject: [PATCH 17/45] Bump SPF library version See #487. --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index f7b1b31..1c10255 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/foxcpp/maddy go 1.15 require ( - blitiri.com.ar/go/spf v1.3.0 + blitiri.com.ar/go/spf v1.4.0 cloud.google.com/go/compute v1.5.0 // indirect github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 diff --git a/go.sum b/go.sum index 218f201..24b68d6 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ blitiri.com.ar/go/spf v1.3.0 h1:KCBeatOXlg1OsRHHWMSPs0KAe0dfXuoQ1xGASgwd0Hs= blitiri.com.ar/go/spf v1.3.0/go.mod h1:/wDIKCvGkTlOLcCjV9yvSZcRy5cM15fpUpAhff8Zjbk= +blitiri.com.ar/go/spf v1.4.0 h1:nRqoBRSJ0Y6y90QKF13xbi3gOV5DtzlYFM5l3iEWNMU= +blitiri.com.ar/go/spf v1.4.0/go.mod h1:/wDIKCvGkTlOLcCjV9yvSZcRy5cM15fpUpAhff8Zjbk= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= From f4995642e2396a6169effe54819fed628912f697 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 12:44:03 +0300 Subject: [PATCH 18/45] Require Go 1.17, use Go 1.17.11 for artifacts --- .github/workflows/cicd.yml | 2 +- docs/tutorials/building-from-source.md | 8 ++-- go.mod | 2 +- internal/check/dns/dns_test.go | 63 -------------------------- 4 files changed, 6 insertions(+), 69 deletions(-) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index dae44f2..53c5246 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -24,7 +24,7 @@ jobs: restore-keys: ${{ runner.os }}-go- - uses: actions/setup-go@v2 with: - go-version: 1.17.7 + go-version: 1.17.11 - name: "Verify build.sh" run: | ./build.sh diff --git a/docs/tutorials/building-from-source.md b/docs/tutorials/building-from-source.md index b3afd83..a187457 100644 --- a/docs/tutorials/building-from-source.md +++ b/docs/tutorials/building-from-source.md @@ -6,7 +6,7 @@ You need C toolchain, Go toolchain and Make: On Debian-based system this should work: ``` -apt-get install golang-1.15 gcc libc6-dev make +apt-get install golang-1.17 gcc libc6-dev make ``` Additionally, if you want manual pages, you should also have scdoc installed. @@ -20,8 +20,8 @@ available in some distributions (*cough* Debian *cough*). It should not be hard to grab a recent built toolchain from golang.org: ``` -wget "https://dl.google.com/go/go1.15.6.linux-amd64.tar.gz" -tar xf "go1.15.6.linux-amd64.tar.gz" +wget "https://dl.google.com/go/go1.17.11.linux-amd64.tar.gz" +tar xf "go1.17.11.linux-amd64.tar.gz" export GOROOT="$PWD/go" export PATH="$PWD/go/bin:$PATH" ``` @@ -36,7 +36,7 @@ $ cd maddy 3. Select the appropriate version to build: ``` -$ git checkout v0.4.0 # a specific release +$ git checkout v0.6.0 # a specific release $ git checkout master # next bugfix release $ git checkout dev # next feature release ``` diff --git a/go.mod b/go.mod index 1c10255..23d29b4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/foxcpp/maddy -go 1.15 +go 1.17 require ( blitiri.com.ar/go/spf v1.4.0 diff --git a/internal/check/dns/dns_test.go b/internal/check/dns/dns_test.go index 3d34efa..ebd92a5 100644 --- a/internal/check/dns/dns_test.go +++ b/internal/check/dns/dns_test.go @@ -120,66 +120,3 @@ func TestRequireMXRecord(t *testing.T) { test("foo@example.org", "example.org", []net.MX{{Host: "."}}, true) } -func TestMatchingEHLO(t *testing.T) { - test := func(srcHost string, srcIP net.IP, a, aaaa []string, fail bool) { - zones := map[string]mockdns.Zone{} - if a != nil && aaaa != nil { - zones[srcHost+"."] = mockdns.Zone{ - A: a, - AAAA: aaaa, - } - } - - res := requireMatchingEHLO(check.StatelessCheckContext{ - Resolver: &mockdns.Resolver{ - Zones: zones, - }, - MsgMeta: &module.MsgMetadata{ - Conn: &module.ConnState{ - ConnectionState: smtp.ConnectionState{ - RemoteAddr: &net.TCPAddr{IP: srcIP, Port: 55555}, - Hostname: srcHost, - }, - }, - }, - Logger: testutils.Logger(t, "require_matching_helo"), - }) - - actualFail := res.Reason != nil - if fail && !actualFail { - t.Errorf("srcHost %v, srcIP %v, a %v, aaaa %v: expected failure but check succeeded", srcHost, srcIP, a, aaaa) - } - if !fail && actualFail { - t.Errorf("srcHost %v, srcIP %v, a %v, aaaa %v: unexpected failure", srcHost, srcIP, a, aaaa) - } - } - - test("mx.example.org", net.IPv4(1, 2, 3, 4), - nil, nil, true) - test("mx.example.org", net.IPv4(1, 2, 3, 4), - []string{}, []string{}, true) - test("mx.example.org", net.IPv4(1, 2, 3, 4), - []string{"2.3.4.5"}, nil, true) - test("mx.example.org", net.IPv4(1, 2, 3, 4), - []string{"2.3.4.5"}, []string{"beef::1"}, true) - test("mx.example.org", net.IPv4(1, 2, 3, 4), - []string{"2.3.4.5"}, []string{"beef::1"}, true) - test("mx.example.org", net.IPv4(1, 2, 3, 4), - []string{"1.2.3.4"}, nil, true) - test("mx.example.org", net.IPv4(1, 2, 3, 4), - []string{"1.2.3.4"}, []string{"beef::1"}, false) - test("[1.2.3.5]", net.IPv4(1, 2, 3, 4), - nil, nil, true) - test("[not valid]", net.IPv4(1, 2, 3, 4), - nil, nil, true) - test("[1.2.3.4]", net.IPv4(1, 2, 3, 4), - nil, nil, false) - test("[IPv6:beef::1]", net.IPv4(1, 2, 3, 4), - nil, nil, true) - test("[IPv6:NOT VALID]", net.IPv4(1, 2, 3, 4), - nil, nil, true) - test("[IPv6:beef::1]", net.ParseIP("beef::2"), - nil, nil, true) - test("[IPv6:beef::1]", net.ParseIP("beef::1"), - nil, nil, false) -} From ccec931b6cfa6c51cb537291f5a8234c05e18898 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 13:11:07 +0300 Subject: [PATCH 19/45] go get -u & go mod tidy --- go.mod | 109 +++++++++++------ go.sum | 246 +++++++++++++++++++++++--------------- internal/tls/acme/acme.go | 8 +- 3 files changed, 229 insertions(+), 134 deletions(-) diff --git a/go.mod b/go.mod index 23d29b4..10cdc26 100644 --- a/go.mod +++ b/go.mod @@ -4,19 +4,14 @@ go 1.17 require ( blitiri.com.ar/go/spf v1.4.0 - cloud.google.com/go/compute v1.5.0 // indirect - github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 - github.com/aws/aws-sdk-go v1.43.12 // indirect - github.com/caddyserver/certmagic v0.15.3 - github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect - github.com/digitalocean/godo v1.75.0 // indirect - github.com/emersion/go-imap v1.2.1-0.20220119134953-dcd9ee65c8c7 + github.com/caddyserver/certmagic v0.16.1 + github.com/emersion/go-imap v1.2.1 github.com/emersion/go-imap-compress v0.0.0-20201103190257-14809af1d1b9 github.com/emersion/go-imap-sortthread v1.2.0 - github.com/emersion/go-message v0.15.0 - github.com/emersion/go-milter v0.3.2 - github.com/emersion/go-msgauth v0.6.5 + github.com/emersion/go-message v0.16.0 + github.com/emersion/go-milter v0.3.3 + github.com/emersion/go-msgauth v0.6.6 github.com/emersion/go-sasl v0.0.0-20211008083017-0b9dcfb154ac github.com/emersion/go-smtp v0.15.1-0.20220119142625-1c322d2783aa github.com/foxcpp/go-dovecot-sasl v0.0.0-20200522223722-c4699d7a24bf @@ -25,21 +20,18 @@ require ( github.com/foxcpp/go-imap-mess v0.0.0-20220105225909-b3469f4a4315 github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed github.com/foxcpp/go-imap-sql v0.5.1-0.20220105233636-946daf36ce81 - github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15 + github.com/foxcpp/go-mockdns v1.0.0 github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 - github.com/go-asn1-ber/asn1-ber v1.5.3 // indirect - github.com/go-ldap/ldap/v3 v3.4.2 + github.com/go-ldap/ldap/v3 v3.4.3 github.com/go-sql-driver/mysql v1.6.0 github.com/google/uuid v1.3.0 github.com/johannesboyne/gofakes3 v0.0.0-20210704111953-6a9f95c2941c - github.com/klauspost/compress v1.15.0 // indirect - github.com/klauspost/cpuid/v2 v2.0.11 // indirect - github.com/lib/pq v1.10.4 + github.com/lib/pq v1.10.6 github.com/libdns/alidns v1.0.2 github.com/libdns/cloudflare v0.1.0 - github.com/libdns/digitalocean v0.0.0-20210310230526-186c4ebd2215 + github.com/libdns/digitalocean v0.0.0-20220518195853-a541bc8aa80f github.com/libdns/gandi v1.0.2 - github.com/libdns/googleclouddns v1.0.1 + github.com/libdns/googleclouddns v1.0.2 github.com/libdns/hetzner v0.0.1 github.com/libdns/leaseweb v0.2.1 github.com/libdns/libdns v0.2.1 @@ -48,30 +40,77 @@ require ( github.com/libdns/namedotcom v0.3.3 github.com/libdns/route53 v1.1.2 github.com/libdns/vultr v0.0.0-20211122184636-cd4cb5c12e51 - github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-sqlite3 v2.0.3+incompatible + github.com/miekg/dns v1.1.50 + github.com/minio/minio-go/v7 v7.0.29 + github.com/prometheus/client_golang v1.12.2 + github.com/urfave/cli/v2 v2.10.2 + go.uber.org/zap v1.21.0 + golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d + golang.org/x/net v0.0.0-20220622184535-263ec571b305 + golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f + golang.org/x/text v0.3.7 +) + +require ( + cloud.google.com/go/compute v1.7.0 // indirect + // Do not upgrade go-ntlmssp - newer version are incompatible with go-ldap. + github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect + github.com/aws/aws-sdk-go v1.44.40 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/digitalocean/godo v1.81.0 // indirect + github.com/dustin/go-humanize v1.0.0 // indirect + github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594 // indirect + github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/google/go-cmp v0.5.8 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.1.0 // indirect + github.com/googleapis/gax-go/v2 v2.4.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-retryablehttp v0.7.1 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.15.6 // indirect + github.com/klauspost/cpuid/v2 v2.0.14 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect github.com/mholt/acmez v1.0.2 // indirect - github.com/miekg/dns v1.1.46 github.com/minio/md5-simd v1.1.2 // indirect - github.com/minio/minio-go/v7 v7.0.23 github.com/minio/sha256-simd v1.0.0 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pierrec/lz4 v2.6.1+incompatible // indirect - github.com/prometheus/client_golang v1.12.1 - github.com/rs/xid v1.3.0 // indirect - github.com/urfave/cli/v2 v2.3.0 - github.com/vultr/govultr/v2 v2.14.1 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.35.0 // indirect + github.com/prometheus/procfs v0.7.3 // indirect + github.com/rs/xid v1.4.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect + github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63 // indirect + github.com/sirupsen/logrus v1.8.1 // indirect + github.com/vultr/govultr/v2 v2.17.2 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + go.opencensus.io v0.23.0 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.8.0 // indirect - go.uber.org/zap v1.21.0 - golang.org/x/crypto v0.0.0-20220214200702-86341886e292 - golang.org/x/net v0.0.0-20220225172249-27dd8689420f - golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 // indirect - golang.org/x/text v0.3.7 - golang.org/x/tools v0.1.9 // indirect - google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 // indirect - gopkg.in/ini.v1 v1.66.4 // indirect + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 // indirect + golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664 // indirect + golang.org/x/tools v0.1.11 // indirect + google.golang.org/api v0.85.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20220622171453-ea41d75dfa0f // indirect + google.golang.org/grpc v1.47.0 // indirect + google.golang.org/protobuf v1.28.0 // indirect + gopkg.in/ini.v1 v1.66.6 // indirect + gotest.tools v2.2.0+incompatible // indirect ) replace github.com/emersion/go-imap => github.com/foxcpp/go-imap v1.0.0-beta.1.0.20220105164802-1e767d4cfd62 diff --git a/go.sum b/go.sum index 24b68d6..11ba915 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -blitiri.com.ar/go/spf v1.3.0 h1:KCBeatOXlg1OsRHHWMSPs0KAe0dfXuoQ1xGASgwd0Hs= -blitiri.com.ar/go/spf v1.3.0/go.mod h1:/wDIKCvGkTlOLcCjV9yvSZcRy5cM15fpUpAhff8Zjbk= blitiri.com.ar/go/spf v1.4.0 h1:nRqoBRSJ0Y6y90QKF13xbi3gOV5DtzlYFM5l3iEWNMU= blitiri.com.ar/go/spf v1.4.0/go.mod h1:/wDIKCvGkTlOLcCjV9yvSZcRy5cM15fpUpAhff8Zjbk= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -22,7 +20,6 @@ cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmW cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.82.0/go.mod h1:vlKccHJGuFBFufnAnuB08dfEH9Y3H7dzDzRECFdC2TA= cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= @@ -31,8 +28,10 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.101.1/go.mod h1:55HwjsGW4CHD3JrNuMdZtSDsgTs0CuCB/bBTugD+7AA= +cloud.google.com/go v0.102.0 h1:DAq3r8y4mDgyB/ZPJ9v/5VJNqjgJAxTn6ZYLlUywOu8= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -41,10 +40,14 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0 h1:v/k9Eueb8aAJ0vZuxKMrgm6kPhCLZU9HxFU+AFDs9Uk= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -54,11 +57,13 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.22.0/go.mod h1:GbaLEoMqbVm6sx3Z0R++gSiBlgMv6yUi2q1DeGFKQgE= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 h1:KeNholpO2xKjgaaSyd+DyQRrsQjhbSeS7qe4nEw8aQw= github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962/go.mod h1:kC29dT1vFpj7py2OvG1khBdQpo3kInWP+6QipLbdngo= @@ -71,16 +76,16 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5 github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/aws/aws-sdk-go v1.17.4/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.41.14/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= -github.com/aws/aws-sdk-go v1.43.12 h1:wOdx6+reSDpUBFEuJDA6edCrojzy8rOtMzhS2rD9+7M= -github.com/aws/aws-sdk-go v1.43.12/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.40 h1:MR0qefjBJrZuXE0VoeKMQFtjS2tUeVpbQNfb7NzQNgI= +github.com/aws/aws-sdk-go v1.44.40/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/caddyserver/certmagic v0.15.3 h1:ScY3KVV1eMIUfW74i20kDnD4eWL8T0rG6S6Wnc6nc9U= -github.com/caddyserver/certmagic v0.15.3/go.mod h1:qhkAOthf72ufAcp3Y5jF2RaGE96oip3UbEQRIzwe3/8= +github.com/caddyserver/certmagic v0.16.1 h1:rdSnjcUVJojmL4M0efJ+yHXErrrijS4YYg3FuwRdJkI= +github.com/caddyserver/certmagic v0.16.1/go.mod h1:jKQ5n+ViHAr6DbPwEGLTSM2vDwTO6EvCKBblBRUvvuQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -98,16 +103,16 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/digitalocean/godo v1.41.0/go.mod h1:p7dOjjtSBqCTUksqtA5Fd3uaKs9kyTq2xcz76ulEJRU= -github.com/digitalocean/godo v1.75.0 h1:UijUv60I095CqJqGKdjY2RTPnnIa4iFddmq+1wfyS4Y= -github.com/digitalocean/godo v1.75.0/go.mod h1:GBmu8MkjZmNARE7IXRPmkbbnocNN8+uBm0xbEVw2LCs= +github.com/digitalocean/godo v1.81.0 h1:sjb3fOfPfSlUQUK22E87BcI8Zx2qtnF7VUCCO4UK3C8= +github.com/digitalocean/godo v1.81.0/go.mod h1:BPCqvwbjbGqxuUnIKB4EvS/AX7IDnNmt5fwvIkWo+ew= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/emersion/go-imap-appendlimit v0.0.0-20190308131241-25671c986a6a/go.mod h1:ikgISoP7pRAolqsVP64yMteJa2FIpS6ju88eBT6K1yQ= @@ -118,13 +123,13 @@ github.com/emersion/go-imap-sortthread v1.1.1-0.20200727121200-18e5fb409fed/go.m github.com/emersion/go-imap-sortthread v1.2.0 h1:EMVEJXPWAhXMWECjR82Rn/tza6MddcvTwGAdTu1vJKU= github.com/emersion/go-imap-sortthread v1.2.0/go.mod h1:UhenCBupR+vSYRnqJkpjSq84INUCsyAK1MLpogv14pE= github.com/emersion/go-message v0.11.2/go.mod h1:C4jnca5HOTo4bGN9YdqNQM9sITuT3Y0K6bSUw9RklvY= -github.com/emersion/go-message v0.14.1/go.mod h1:N1JWdZQ2WRUalmdHAX308CWBq747VJ8oUorFI3VCBwU= -github.com/emersion/go-message v0.15.0 h1:urgKGqt2JAc9NFJcgncQcohHdiYb803YTH9OQwHBHIY= github.com/emersion/go-message v0.15.0/go.mod h1:wQUEfE+38+7EW8p8aZ96ptg6bAb1iwdgej19uXASlE4= -github.com/emersion/go-milter v0.3.2 h1:j8hrLXf8PAHFhRHDdBoBKluQveMZYoaK7aRIqvaoRTA= -github.com/emersion/go-milter v0.3.2/go.mod h1:ablHK0pbLB83kMFBznp/Rj8aV+Kc3jw8cxzzmCNLIOY= -github.com/emersion/go-msgauth v0.6.5 h1:UaXBtrjYBM3SWw9BBODeSp0uYtScx3CuIF7/RQfkeWo= -github.com/emersion/go-msgauth v0.6.5/go.mod h1:/jbQISFJgtT12T8akRs20l+wI4HcyN/kWy7VRdHEAmA= +github.com/emersion/go-message v0.16.0 h1:uZLz8ClLv3V5fSFF/fFdW9jXjrZkXIpE1Fn8fKx7pO4= +github.com/emersion/go-message v0.16.0/go.mod h1:pDJDgf/xeUIF+eicT6B/hPX/ZbEorKkUMPOxrPVG2eQ= +github.com/emersion/go-milter v0.3.3 h1:DiP9Xmw2FqEuosNCd01XPDBb1K3OziNmt7BG2ddFlgs= +github.com/emersion/go-milter v0.3.3/go.mod h1:ablHK0pbLB83kMFBznp/Rj8aV+Kc3jw8cxzzmCNLIOY= +github.com/emersion/go-msgauth v0.6.6 h1:buv5lL8v/3v4RpHnQFS2IPhE3nxSRX+AxnrEJbDbHhA= +github.com/emersion/go-msgauth v0.6.6/go.mod h1:A+/zaz9bzukLM6tRWRgJ3BdrBi+TFKTvQ3fGMFOI9SM= github.com/emersion/go-sasl v0.0.0-20190817083125-240c8404624e/go.mod h1:G/dpzLu16WtQpBfQ/z3LYiYJn3ZhKSGWn83fyoyQe/k= github.com/emersion/go-sasl v0.0.0-20191210011802-430746ea8b9b/go.mod h1:G/dpzLu16WtQpBfQ/z3LYiYJn3ZhKSGWn83fyoyQe/k= github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= @@ -143,6 +148,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/foxcpp/go-dovecot-sasl v0.0.0-20200522223722-c4699d7a24bf h1:rmBPY5fryjp9zLQYsUmQqqgsYq7qeVfrjtr96Tf9vD8= github.com/foxcpp/go-dovecot-sasl v0.0.0-20200522223722-c4699d7a24bf/go.mod h1:5yZUmwr851vgjyAfN7OEfnrmKOh/qLA5dbGelXYsu1E= @@ -159,27 +165,28 @@ github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed/go.mod h1 github.com/foxcpp/go-imap-sql v0.5.1-0.20220105233636-946daf36ce81 h1:hd79KlESgagszJqmV+dm36r5NR5NFYCMQ2dWi05gKKs= github.com/foxcpp/go-imap-sql v0.5.1-0.20220105233636-946daf36ce81/go.mod h1:tl6w1OlN7LLvJOoWTR7bNt0JQE+wPbYr8f3/nJSSlwU= github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= -github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15 h1:nLPjjvpUAODOR6vY/7o0hBIk8iTr19Fvmf8aFx/kC7A= -github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= +github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= +github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 h1:k8w0iy6GP9oeSZWUH3p2DqZHaXDKZGNs3NZGZMGfQHc= github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8/go.mod h1:HO1YOCbBM8KjpgThMMFejHx6K/UsnEv2Oh9YGtBIlOU= github.com/frankban/quicktest v1.5.0 h1:Tb4jWdSpdjKzTUicPnY61PZxKbDoGa7ABbrReT3gQVY= github.com/frankban/quicktest v1.5.0/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-asn1-ber/asn1-ber v1.5.3 h1:u7utq56RUFiynqUzgVMFDymapcOtQ/MZkh3H4QYkxag= -github.com/go-asn1-ber/asn1-ber v1.5.3/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= +github.com/go-asn1-ber/asn1-ber v1.5.4 h1:vXT6d/FNDiELJnLb6hGNa309LMsrCoYFvpwHDF0+Y1A= +github.com/go-asn1-ber/asn1-ber v1.5.4/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-ldap/ldap/v3 v3.4.2 h1:zFZKcXKLqZpFMrMQGHeHWKXbDTdNCmhGY9AK41zPh+8= -github.com/go-ldap/ldap/v3 v3.4.2/go.mod h1:iYS1MdmrmceOJ1QOTnRXrIs7i3kloqtmGQjRvjKpyMg= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-ldap/ldap/v3 v3.4.3 h1:JCKUtJPIcyOuG7ctGabLKMgIlKnGumD/iGjuWeEruDI= +github.com/go-ldap/ldap/v3 v3.4.3/go.mod h1:7LdHfVt6iIOESVEe3Bs4Jp2sHEKgDeduAhgM1/f9qmo= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -218,7 +225,6 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -234,8 +240,9 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= @@ -244,8 +251,9 @@ github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPg github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -257,7 +265,6 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -266,11 +273,18 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0 h1:zO8WHNx/MYiAKJ3d5spxZXZE6KHmIQGQcAzwUzV7qQw= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -278,8 +292,9 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= +github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -307,16 +322,16 @@ github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.0 h1:xqfchp4whNFxn5A4XFyyYtitiWI8Hy5EW59jEwcyL6U= -github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.6 h1:6D9PcO8QWu0JyaQ2zUMmu16T1T+zjjEpP91guRsvDfY= +github.com/klauspost/compress v1.15.6/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.11 h1:i2lw1Pm7Yi/4O6XCSyJWqEHI2MDw2FzUK6o/D21xn2A= github.com/klauspost/cpuid/v2 v2.0.11/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= +github.com/klauspost/cpuid/v2 v2.0.14 h1:QRqdp6bb9M9S5yyKeYteXKuoKE4p0tGlra81fKOpWH8= +github.com/klauspost/cpuid/v2 v2.0.14/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -326,23 +341,22 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.4.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libdns/alidns v1.0.2 h1:WiT1cO2LWY95YNocTVBGipHjvRaFQOxMQ9X5bTiryRo= github.com/libdns/alidns v1.0.2/go.mod h1:e18uAG6GanfRhcJj6/tps2rCMzQJaYVcGKT+ELjdjGE= github.com/libdns/cloudflare v0.1.0 h1:93WkJaGaiXCe353LHEP36kAWCUw0YjFqwhkBkU2/iic= github.com/libdns/cloudflare v0.1.0/go.mod h1:a44IP6J1YH6nvcNl1PverfJviADgXUnsozR3a7vBKN8= -github.com/libdns/digitalocean v0.0.0-20210310230526-186c4ebd2215 h1:JYi/h0UEECrxY2JCi5FIfZEDFuUJvwihUWdm3bnDu2A= -github.com/libdns/digitalocean v0.0.0-20210310230526-186c4ebd2215/go.mod h1:GEZlJR69sPAUWjb77eLyeDczZNL+ezbo5UGIY2/xZXA= +github.com/libdns/digitalocean v0.0.0-20220518195853-a541bc8aa80f h1:Y0JkwI0Uip+Zrh71aHLmNz150cKnWuC+535v/zLS8zo= +github.com/libdns/digitalocean v0.0.0-20220518195853-a541bc8aa80f/go.mod h1:B2TChhOTxvBflpRTHlguXWtwa1Ha5WI6JkB6aCViM+0= github.com/libdns/gandi v1.0.2 h1:1Ts8UpI1x5PVKpOjKC7Dn4+EObndz9gm6vdZnloHSKQ= github.com/libdns/gandi v1.0.2/go.mod h1:hxpbQKcQFgQrTS5lV4tAgn6QoL6HcCnoBJaW5nOW4Sk= -github.com/libdns/googleclouddns v1.0.1 h1:g3BO+c4W4NYl8vkJk5sKLYwVTmOtGpnI2GryqSzJgkk= -github.com/libdns/googleclouddns v1.0.1/go.mod h1:y6uAE0hE+uUwsP6BOm0Gym+I71gO65v9VZci25wRkkw= +github.com/libdns/googleclouddns v1.0.2 h1:r7zZKDlMUglvOT6hmpZuMmxld8KpddbsVhEETEHRjjg= +github.com/libdns/googleclouddns v1.0.2/go.mod h1:Qogt1qOp5teTZAyiKfkhBzI5Ri+6Z/XA16y6eJz2veA= github.com/libdns/hetzner v0.0.1 h1:WsmcsOKnfpKmzwhfyqhGQEIlEeEaEUvb7ezoJgBKaqU= github.com/libdns/hetzner v0.0.1/go.mod h1:Jj12aJipO9Ir7OGaXueJ5J1RnerFMD0auGa6k9kujG4= github.com/libdns/leaseweb v0.2.1 h1:bQ759T44Tpmzd7mmMEgaLimSztPIRaMk1k6X4UXuJOA= github.com/libdns/leaseweb v0.2.1/go.mod h1:OeZtd+s2M1RfC3wIJF9SHZDFpD7H5RRiC6OPK3AWYjA= -github.com/libdns/libdns v0.0.0-20200501023120-186724ffc821/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40= github.com/libdns/libdns v0.1.0/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40= github.com/libdns/libdns v0.2.0/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40= github.com/libdns/libdns v0.2.1 h1:Wu59T7wSHRgtA0cfxC+n1c/e+O3upJGWytknkmFEDis= @@ -361,23 +375,22 @@ github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7 github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/martinlindhe/base36 v1.0.0/go.mod h1:+AtEs8xrBpCeYgSLoY/aJ6Wf37jtBuR0s35750M27+8= -github.com/martinlindhe/base36 v1.1.0/go.mod h1:+AtEs8xrBpCeYgSLoY/aJ6Wf37jtBuR0s35750M27+8= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mholt/acmez v1.0.1/go.mod h1:8qnn8QA/Ewx8E3ZSsmscqsIjhhpxuy9vqdgbX2ceceM= github.com/mholt/acmez v1.0.2 h1:C8wsEBIUVi6e0DYoxqCcFuXtwc4AWXL/jgcDjF7mjVo= github.com/mholt/acmez v1.0.2/go.mod h1:8qnn8QA/Ewx8E3ZSsmscqsIjhhpxuy9vqdgbX2ceceM= github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/dns v1.1.46 h1:uzwpxRtSVxtcIZmz/4Uz6/Rn7G11DvsaslXoy5LxQio= +github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.46/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.23 h1:NleyGQvAn9VQMU+YHVrgV4CX+EPtxPt/78lHOOTncy4= -github.com/minio/minio-go/v7 v7.0.23/go.mod h1:ei5JjmxwHaMrgsMrn4U/+Nmg+d8MKS1U2DAn1ou4+Do= +github.com/minio/minio-go/v7 v7.0.29 h1:7md6lIq1s6zPzUiDRX1BVLHolA4pDM8RMQqIszaJbY0= +github.com/minio/minio-go/v7 v7.0.29/go.mod h1:x81+AX5gHSfCSqw7jxRKHvxUXMlE5uKX0Vb75Xk5yYg= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= @@ -405,8 +418,9 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -415,8 +429,9 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.35.0 h1:Eyr+Pw2VymWejHqCugNaQXkAi6KayVNxaHeu6khmFBE= +github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= @@ -426,16 +441,14 @@ github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/xid v1.3.0 h1:6NjYksEUlhurdVehpc7S7dk6DAmcKv8V9gG0FsVN2U4= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63 h1:J6qvD6rbmOil46orKqJaRPG+zTpoGlBTUdyv8ki63L0= github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63/go.mod h1:n+VKSARF5y/tS9XFSP7vWDfS+GUC5vs/YT7M5XDTUEM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -456,11 +469,13 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= +github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= github.com/vultr/govultr/v2 v2.11.0/go.mod h1:JjUljQdSZx+MELCAJvZ/JH32bJotmflnsyS0NOjb8Jg= -github.com/vultr/govultr/v2 v2.14.1 h1:Z4nd9mXNQ5wd63aw0MZOalFeTkJ8L6Sed3PTqagp4TA= -github.com/vultr/govultr/v2 v2.14.1/go.mod h1:JjUljQdSZx+MELCAJvZ/JH32bJotmflnsyS0NOjb8Jg= +github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= +github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -489,7 +504,6 @@ go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -499,13 +513,14 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220210151621-f4118a5b28e2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -529,7 +544,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -542,8 +556,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -583,7 +597,6 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -591,8 +604,14 @@ golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211118161319-6a13c67c3ce4/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220622184535-263ec571b305 h1:dAgbJ2SP4jD6XYfMNLVj0BF21jo2PjChrtGaAvF5M3I= +golang.org/x/net v0.0.0-20220622184535-263ec571b305/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -604,14 +623,17 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 h1:+jnHzr9VPj32ykQVai5DNahi9+NSp7yYuCsl5eAQtL0= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -622,8 +644,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -666,16 +689,13 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -691,8 +711,16 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664 h1:wEZYwx+kK+KlZ0hpvP2Ls1Xr4+RWnlzGFwPP0aiDjIU= +golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -702,7 +730,6 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5-0.20201125200606-c27b9fd57aec/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= @@ -767,13 +794,16 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -795,7 +825,6 @@ google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34q google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.46.0/go.mod h1:ceL4oozhkAiTID8XMmJBsIxID/9wMXJVVFXPg4ylg3I= google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= @@ -807,8 +836,16 @@ google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdr google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0 h1:67zQnAE0T2rB0A3CwLSas0K+SbVzSxP+zTLkQLexeiw= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0 h1:8rJoHuRxx+vCmZtAO/3k1dRLvYNVyTJtZ5oaFZvhgvc= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -856,11 +893,9 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210524171403-669157292da3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -884,8 +919,24 @@ google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 h1:U9V52f6rAgINH7kT+musA1qF8kWyVOxzF8eYuOVuFwQ= google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220622171453-ea41d75dfa0f h1:kYlCnpX4eB0QEnXm12j4DAX4yrjjhJmsyuWtSSZ+Buo= +google.golang.org/genproto v0.0.0-20220622171453-ea41d75dfa0f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -912,8 +963,12 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0 h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -927,17 +982,17 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -949,8 +1004,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/tls/acme/acme.go b/internal/tls/acme/acme.go index 65f9e7c..96c4a0f 100644 --- a/internal/tls/acme/acme.go +++ b/internal/tls/acme/acme.go @@ -88,11 +88,11 @@ func (l *Loader) Init(cfg *config.Map) error { }) l.cfg = certmagic.New(l.cache, certmagic.Config{ - Storage: l.store, // not sure if it is necessary to set these twice - Logger: cmLog, + Storage: l.store, // not sure if it is necessary to set these twice + Logger: cmLog, DefaultServerName: hostname, }) - mngr := certmagic.NewACMEManager(l.cfg, certmagic.ACMEManager{ + mngr := certmagic.NewACMEIssuer(l.cfg, certmagic.ACMEIssuer{ Logger: cmLog, CA: caPath, Email: email, @@ -150,7 +150,7 @@ func (l *Loader) InstanceName() string { func init() { hooks.AddHook(hooks.EventShutdown, func() { - certmagic.CleanUpOwnLocks(nil) + certmagic.CleanUpOwnLocks(context.TODO(), log.DefaultLogger.Zap()) }) } From 51bfc9a756817ed6148404cec69a365a09aeff71 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 13:49:39 +0300 Subject: [PATCH 20/45] Fix-up doc --- docs/reference/storage/imap-filters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/storage/imap-filters.md b/docs/reference/storage/imap-filters.md index 83f5cf1..3ddc7ef 100644 --- a/docs/reference/storage/imap-filters.md +++ b/docs/reference/storage/imap-filters.md @@ -40,7 +40,7 @@ in command name are not processed to avoid possible command injection attacks. Additionally, for imap.filter.command, {account\_name} placeholder is replaced with effective IMAP account name, {rcpt_to}, {original_rcpt_to} provide access to the SMTP envelope recipient (before and after any rewrites), -{subject} is replaced with the +{subject} is replaced with the Subject header, if it is present. Note that if you use provided systemd units on Linux, maddy executable is sandboxed - all commands will be executed with heavily restricted filesystem From 75ac2a6f209e525edb8e65a7c27bbe0e1e734081 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 14:04:51 +0300 Subject: [PATCH 21/45] table/file: Reimplement conditional reloads --- internal/table/file_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/table/file_test.go b/internal/table/file_test.go index 18bf65d..4ab626b 100644 --- a/internal/table/file_test.go +++ b/internal/table/file_test.go @@ -112,7 +112,7 @@ func TestFileReload(t *testing.T) { } // This delay is somehow important. Not sure why. - time.Sleep(250 * time.Millisecond) + time.Sleep(500 * time.Millisecond) if err := ioutil.WriteFile(f.Name(), []byte("dog: cat"), os.ModePerm); err != nil { t.Fatal(err) From 80328b8dee1b06c8bbf1fec69355928b784f8b10 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 14:34:57 +0300 Subject: [PATCH 22/45] Fix a few linter warnings + gofmt + goimports --- .mkdocs.yml | 2 +- README.md | 2 +- cmd/maddy/main.go | 2 +- cmd/maddy/test.conf | 13 +++++++++++++ directories.go | 3 ++- directories_docker.go | 3 ++- framework/dns/debugflags.go | 3 ++- framework/log/syslog.go | 3 ++- framework/log/syslog_stub.go | 3 ++- internal/auth/pam/pam.go | 3 ++- internal/auth/pam/pam_stub.go | 3 ++- internal/auth/shadow/module.go | 3 ++- internal/check/dns/dns_test.go | 1 - internal/check/skeleton.go | 3 ++- internal/cli/app.go | 10 +++++++--- internal/cli/clitools/termios.go | 3 ++- internal/cli/clitools/termios_stub.go | 3 ++- internal/cli/ctl/imap.go | 3 ++- internal/cli/ctl/users.go | 4 ++-- internal/libdns/alidns.go | 3 ++- internal/libdns/cloudflare.go | 3 ++- internal/libdns/digitalocean.go | 3 ++- internal/libdns/gandi.go | 3 ++- internal/libdns/googleclouddns.go | 3 ++- internal/libdns/hetzner.go | 3 ++- internal/libdns/leaseweb.go | 3 ++- internal/libdns/metaname.go | 3 ++- internal/libdns/namecheap.go | 3 ++- internal/libdns/namedotcom.go | 3 ++- internal/libdns/route53.go | 3 ++- internal/libdns/vultr.go | 3 ++- internal/modify/replace_addr_test.go | 1 - internal/msgpipeline/msgpipeline.go | 1 - internal/storage/blob/test_blob.go | 7 ++++--- internal/storage/blob/test_blob_nosqlite.go | 3 ++- internal/storage/imapsql/bench_test.go | 2 +- internal/storage/imapsql/sqlite3.go | 3 ++- internal/table/file.go | 8 ++++---- internal/table/sql_query_test.go | 3 ++- internal/table/sqlite3.go | 3 ++- internal/target/remote/debugflags.go | 3 ++- internal/target/skeleton.go | 3 ++- maddy_debug.go | 3 ++- signal.go | 3 ++- signal_nonposix.go | 3 ++- systemd.go | 3 ++- systemd_nonlinux.go | 3 ++- tests/basic_test.go | 3 ++- tests/cover_test.go | 3 ++- tests/dovecot_sasl_test.go | 5 +++-- tests/dovecot_sasld_test.go | 3 ++- tests/gocovcat.go | 1 + tests/imapsql_test.go | 3 ++- tests/issue327_test.go | 3 ++- tests/limits_test.go | 3 ++- tests/lmtp_test.go | 3 ++- tests/mta_test.go | 3 ++- tests/replace_addr_test.go | 3 ++- tests/smtp_autobuffer_test.go | 3 ++- tests/smtp_test.go | 3 ++- tests/stress_test.go | 3 ++- 61 files changed, 132 insertions(+), 68 deletions(-) create mode 100644 cmd/maddy/test.conf diff --git a/.mkdocs.yml b/.mkdocs.yml index 9c352e8..07b0332 100644 --- a/.mkdocs.yml +++ b/.mkdocs.yml @@ -79,4 +79,4 @@ nav: - internals/specifications.md - internals/unicode.md - internals/quirks.md - - internals/sqlite.md \ No newline at end of file + - internals/sqlite.md diff --git a/README.md b/README.md index cb1b4c3..d5a79b6 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ daemon with uniform configuration and minimal maintenance cost. feature-packed implementation you may want to use Dovecot instead. maddy still can handle message delivery business. -[![builds.sr.ht status](https://builds.sr.ht/~emersion/maddy.svg)](https://builds.sr.ht/~emersion/maddy?) +[![CI status](https://img.shields.io/github/workflow/status/foxcpp/maddy/Testing%20and%20release%20preparation?style=flat-square)](https://github.com/foxcpp/maddy/actions/workflows/cicd.yml) [![Issues tracker](https://img.shields.io/github/issues/foxcpp/maddy)](https://github.com/foxcpp/maddy) * [Setup tutorial](https://maddy.email/tutorials/setting-up/) diff --git a/cmd/maddy/main.go b/cmd/maddy/main.go index 23c6047..1007417 100644 --- a/cmd/maddy/main.go +++ b/cmd/maddy/main.go @@ -20,7 +20,7 @@ package main import ( _ "github.com/foxcpp/maddy" - "github.com/foxcpp/maddy/internal/cli" + maddycli "github.com/foxcpp/maddy/internal/cli" _ "github.com/foxcpp/maddy/internal/cli/ctl" ) diff --git a/cmd/maddy/test.conf b/cmd/maddy/test.conf new file mode 100644 index 0000000..cf2f800 --- /dev/null +++ b/cmd/maddy/test.conf @@ -0,0 +1,13 @@ +state_dir /tmp +runtime_dir /tmp + +imap tcp://127.0.0.1:2222 { + tls off + auth pam + storage imapsql { + driver sqlite3 + dsn /tmp/hello.db + delivery_map email_localpart + auth_normalize precis_casefold + } +} diff --git a/directories.go b/directories.go index 8cc64d1..b3930db 100644 --- a/directories.go +++ b/directories.go @@ -1,4 +1,5 @@ -//+build !docker +//go:build !docker +// +build !docker package maddy diff --git a/directories_docker.go b/directories_docker.go index 16a9b37..4869f60 100644 --- a/directories_docker.go +++ b/directories_docker.go @@ -1,4 +1,5 @@ -//+build docker +//go:build docker +// +build docker package maddy diff --git a/framework/dns/debugflags.go b/framework/dns/debugflags.go index 5fd0df4..fde218b 100644 --- a/framework/dns/debugflags.go +++ b/framework/dns/debugflags.go @@ -1,4 +1,5 @@ -//+build debugflags +//go:build debugflags +// +build debugflags /* Maddy Mail Server - Composable all-in-one email server. diff --git a/framework/log/syslog.go b/framework/log/syslog.go index 7e63a9d..d608f55 100644 --- a/framework/log/syslog.go +++ b/framework/log/syslog.go @@ -1,4 +1,5 @@ -//+build !windows,!plan9 +//go:build !windows && !plan9 +// +build !windows,!plan9 /* Maddy Mail Server - Composable all-in-one email server. diff --git a/framework/log/syslog_stub.go b/framework/log/syslog_stub.go index 79a1969..bc48616 100644 --- a/framework/log/syslog_stub.go +++ b/framework/log/syslog_stub.go @@ -1,4 +1,5 @@ -//+build windows plan9 +//go:build windows || plan9 +// +build windows plan9 /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/auth/pam/pam.go b/internal/auth/pam/pam.go index 85e2eff..2b5b0ef 100644 --- a/internal/auth/pam/pam.go +++ b/internal/auth/pam/pam.go @@ -1,4 +1,5 @@ -//+build cgo,libpam +//go:build cgo && libpam +// +build cgo,libpam /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/auth/pam/pam_stub.go b/internal/auth/pam/pam_stub.go index a9b9431..fb75421 100644 --- a/internal/auth/pam/pam_stub.go +++ b/internal/auth/pam/pam_stub.go @@ -1,4 +1,5 @@ -//+build !cgo !libpam +//go:build !cgo || !libpam +// +build !cgo !libpam /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/auth/shadow/module.go b/internal/auth/shadow/module.go index 1a6931f..92307bf 100644 --- a/internal/auth/shadow/module.go +++ b/internal/auth/shadow/module.go @@ -1,4 +1,5 @@ -//+build !windows +//go:build !windows +// +build !windows /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/check/dns/dns_test.go b/internal/check/dns/dns_test.go index ebd92a5..5f04a87 100644 --- a/internal/check/dns/dns_test.go +++ b/internal/check/dns/dns_test.go @@ -119,4 +119,3 @@ func TestRequireMXRecord(t *testing.T) { test("", "", nil, false) // Permit <> for bounces. test("foo@example.org", "example.org", []net.MX{{Host: "."}}, true) } - diff --git a/internal/check/skeleton.go b/internal/check/skeleton.go index 77a34e7..f374359 100644 --- a/internal/check/skeleton.go +++ b/internal/check/skeleton.go @@ -1,4 +1,5 @@ -//+build ignore +//go:build ignore +// +build ignore /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/cli/app.go b/internal/cli/app.go index 78e6ec1..fc4273d 100644 --- a/internal/cli/app.go +++ b/internal/cli/app.go @@ -95,11 +95,15 @@ func Run() { // Actual entry point is registered in maddy.go. // Print help when called via maddyctl executable. To be removed - // once backward compatbility hack for 'maddy run' is removed too. + // once backward compatibility hack for 'maddy run' is removed too. if strings.Contains(os.Args[0], "maddyctl") && len(os.Args) == 1 { - app.Run([]string{os.Args[0], "help"}) + if err := app.Run([]string{os.Args[0], "help"}); err != nil { + log.DefaultLogger.Error("app.Run failed", err) + } return } - app.Run(os.Args) + if err := app.Run(os.Args); err != nil { + log.DefaultLogger.Error("app.Run failed", err) + } } diff --git a/internal/cli/clitools/termios.go b/internal/cli/clitools/termios.go index 926d268..cf817d1 100644 --- a/internal/cli/clitools/termios.go +++ b/internal/cli/clitools/termios.go @@ -1,4 +1,5 @@ -//+build linux +//go:build linux +// +build linux /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/cli/clitools/termios_stub.go b/internal/cli/clitools/termios_stub.go index 0d8ef3b..03397fa 100644 --- a/internal/cli/clitools/termios_stub.go +++ b/internal/cli/clitools/termios_stub.go @@ -1,4 +1,5 @@ -//+build !linux +//go:build !linux +// +build !linux /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/cli/ctl/imap.go b/internal/cli/ctl/imap.go index bc1de67..069aef6 100644 --- a/internal/cli/ctl/imap.go +++ b/internal/cli/ctl/imap.go @@ -468,7 +468,8 @@ func mboxesCreate(be module.Storage, ctx *cli.Context) error { } if ctx.IsSet("special") { - attr := "\\" + strings.Title(ctx.String("special")) + attr := "\\" + strings.Title(ctx.String("special")) //nolint:staticcheck + // (nolint) strings.Title is perfectly fine there since special mailbox tags will never use Unicode. suu, ok := u.(SpecialUseUser) if !ok { diff --git a/internal/cli/ctl/users.go b/internal/cli/ctl/users.go index 924e433..09dc909 100644 --- a/internal/cli/ctl/users.go +++ b/internal/cli/ctl/users.go @@ -199,8 +199,8 @@ func usersCreate(be module.PlainUserDB, ctx *cli.Context) error { } } - if be, ok := be.(*pass_table.Auth); ok { - return be.CreateUserHash(username, pass, ctx.String("hash"), pass_table.HashOpts{ + if beHash, ok := be.(*pass_table.Auth); ok { + return beHash.CreateUserHash(username, pass, ctx.String("hash"), pass_table.HashOpts{ BcryptCost: ctx.Int("bcrypt-cost"), }) } else if ctx.IsSet("hash") || ctx.IsSet("bcrypt-cost") { diff --git a/internal/libdns/alidns.go b/internal/libdns/alidns.go index 5acefe9..cb980be 100644 --- a/internal/libdns/alidns.go +++ b/internal/libdns/alidns.go @@ -1,4 +1,5 @@ -//+build libdns_alidns libdns_all +//go:build libdns_alidns || libdns_all +// +build libdns_alidns libdns_all package libdns diff --git a/internal/libdns/cloudflare.go b/internal/libdns/cloudflare.go index 10ae981..3031953 100644 --- a/internal/libdns/cloudflare.go +++ b/internal/libdns/cloudflare.go @@ -1,4 +1,5 @@ -//+build libdns_cloudflare !libdns_separate +//go:build libdns_cloudflare || !libdns_separate +// +build libdns_cloudflare !libdns_separate package libdns diff --git a/internal/libdns/digitalocean.go b/internal/libdns/digitalocean.go index e18c38c..98b77b0 100644 --- a/internal/libdns/digitalocean.go +++ b/internal/libdns/digitalocean.go @@ -1,4 +1,5 @@ -//+build libdns_digitalocean !libdns_separate +//go:build libdns_digitalocean || !libdns_separate +// +build libdns_digitalocean !libdns_separate package libdns diff --git a/internal/libdns/gandi.go b/internal/libdns/gandi.go index d90fa69..91e8d87 100644 --- a/internal/libdns/gandi.go +++ b/internal/libdns/gandi.go @@ -1,4 +1,5 @@ -//+build libdns_gandi !libdns_separate +//go:build libdns_gandi || !libdns_separate +// +build libdns_gandi !libdns_separate package libdns diff --git a/internal/libdns/googleclouddns.go b/internal/libdns/googleclouddns.go index 90276df..b59c056 100644 --- a/internal/libdns/googleclouddns.go +++ b/internal/libdns/googleclouddns.go @@ -1,4 +1,5 @@ -//+build libdns_googleclouddns libdns_all +//go:build libdns_googleclouddns || libdns_all +// +build libdns_googleclouddns libdns_all package libdns diff --git a/internal/libdns/hetzner.go b/internal/libdns/hetzner.go index c48b63b..b360641 100644 --- a/internal/libdns/hetzner.go +++ b/internal/libdns/hetzner.go @@ -1,4 +1,5 @@ -//+build libdns_hetzner !libdns_separate +//go:build libdns_hetzner || !libdns_separate +// +build libdns_hetzner !libdns_separate package libdns diff --git a/internal/libdns/leaseweb.go b/internal/libdns/leaseweb.go index d57fb0b..23af12d 100644 --- a/internal/libdns/leaseweb.go +++ b/internal/libdns/leaseweb.go @@ -1,4 +1,5 @@ -//+build libdns_leaseweb libdns_all +//go:build libdns_leaseweb || libdns_all +// +build libdns_leaseweb libdns_all package libdns diff --git a/internal/libdns/metaname.go b/internal/libdns/metaname.go index 5038963..2e37ddd 100644 --- a/internal/libdns/metaname.go +++ b/internal/libdns/metaname.go @@ -1,4 +1,5 @@ -//+build libdns_metaname libdns_all +//go:build libdns_metaname || libdns_all +// +build libdns_metaname libdns_all package libdns diff --git a/internal/libdns/namecheap.go b/internal/libdns/namecheap.go index 77b942c..656ebe5 100644 --- a/internal/libdns/namecheap.go +++ b/internal/libdns/namecheap.go @@ -1,4 +1,5 @@ -//+build go1.16 +//go:build go1.16 +// +build go1.16 package libdns diff --git a/internal/libdns/namedotcom.go b/internal/libdns/namedotcom.go index 3061544..3ce3c51 100644 --- a/internal/libdns/namedotcom.go +++ b/internal/libdns/namedotcom.go @@ -1,4 +1,5 @@ -//+build libdns_namedotdom libdns_all +//go:build libdns_namedotdom || libdns_all +// +build libdns_namedotdom libdns_all package libdns diff --git a/internal/libdns/route53.go b/internal/libdns/route53.go index 6b4664c..dd50724 100644 --- a/internal/libdns/route53.go +++ b/internal/libdns/route53.go @@ -1,4 +1,5 @@ -//+build libdns_route53 libdns_all +//go:build libdns_route53 || libdns_all +// +build libdns_route53 libdns_all package libdns diff --git a/internal/libdns/vultr.go b/internal/libdns/vultr.go index 684a8ce..9157258 100644 --- a/internal/libdns/vultr.go +++ b/internal/libdns/vultr.go @@ -1,4 +1,5 @@ -//+build libdns_vultr !libdns_separate +//go:build libdns_vultr || !libdns_separate +// +build libdns_vultr !libdns_separate package libdns diff --git a/internal/modify/replace_addr_test.go b/internal/modify/replace_addr_test.go index fc6fd6f..e16cfd3 100644 --- a/internal/modify/replace_addr_test.go +++ b/internal/modify/replace_addr_test.go @@ -103,7 +103,6 @@ func testReplaceAddr(t *testing.T, modName string) { test("test@example.com", []string{"1@example.com", "2@example.com", "3@example.com"}, map[string][]string{"test@example.com": []string{"1@example.com", "2@example.com", "3@example.com"}}) } - } func TestReplaceAddr_RewriteSender(t *testing.T) { diff --git a/internal/msgpipeline/msgpipeline.go b/internal/msgpipeline/msgpipeline.go index 31df782..9b57fe9 100644 --- a/internal/msgpipeline/msgpipeline.go +++ b/internal/msgpipeline/msgpipeline.go @@ -339,7 +339,6 @@ func (dd *msgpipelineDelivery) AddRcpt(ctx context.Context, to string) error { dd.log.Debugln("per-rcpt modifiers:", to, "=>", newTo) for _, to = range newTo { - wrapErr = func(err error) error { return exterrors.WithFields(err, map[string]interface{}{ "effective_rcpt": to, diff --git a/internal/storage/blob/test_blob.go b/internal/storage/blob/test_blob.go index 9984c61..9672efe 100644 --- a/internal/storage/blob/test_blob.go +++ b/internal/storage/blob/test_blob.go @@ -1,4 +1,5 @@ -//+build cgo,!no_sqlite3 +//go:build cgo && !no_sqlite3 +// +build cgo,!no_sqlite3 package blob @@ -40,8 +41,8 @@ func TestStore(t *testing.T, newStore func() module.BlobStore, cleanStore func(m b, err := imapsql.New("sqlite3", ":memory:", imapsql2.ExtBlobStore{Base: store}, imapsql.Opts{ - PRNG: prng, - Log: testutils.Logger(t, "imapsql"), + PRNG: prng, + Log: testutils.Logger(t, "imapsql"), }, ) if err != nil { diff --git a/internal/storage/blob/test_blob_nosqlite.go b/internal/storage/blob/test_blob_nosqlite.go index 72a7a33..601f467 100644 --- a/internal/storage/blob/test_blob_nosqlite.go +++ b/internal/storage/blob/test_blob_nosqlite.go @@ -1,4 +1,5 @@ -//+build !cgo no_sqlite3 +//go:build !cgo || no_sqlite3 +// +build !cgo no_sqlite3 package blob diff --git a/internal/storage/imapsql/bench_test.go b/internal/storage/imapsql/bench_test.go index 9b3763a..04cfac9 100644 --- a/internal/storage/imapsql/bench_test.go +++ b/internal/storage/imapsql/bench_test.go @@ -46,7 +46,7 @@ func createTestDB(tb testing.TB, compAlgo string) *Storage { } db, err := imapsql.New(testDB, testDSN, &imapsql.FSStore{Root: testFsstore}, imapsql.Opts{ - CompressAlgo: compAlgo, + CompressAlgo: compAlgo, }) if err != nil { tb.Fatal(err) diff --git a/internal/storage/imapsql/sqlite3.go b/internal/storage/imapsql/sqlite3.go index 84cc6c9..3307d59 100644 --- a/internal/storage/imapsql/sqlite3.go +++ b/internal/storage/imapsql/sqlite3.go @@ -1,4 +1,5 @@ -//+build !nosqlite3,cgo +//go:build !nosqlite3 && cgo +// +build !nosqlite3,cgo /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/table/file.go b/internal/table/file.go index 87c481d..6c8afe2 100644 --- a/internal/table/file.go +++ b/internal/table/file.go @@ -119,11 +119,11 @@ func (f *File) reloader() { }() t := time.NewTicker(reloadInterval) + defer t.Stop() for { select { case <-t.C: - var latestStamp time.Time info, err := os.Stat(f.file) if err != nil { if os.IsNotExist(err) { @@ -133,10 +133,10 @@ func (f *File) reloader() { f.mLck.Unlock() continue } - f.log.Printf("%v", err) + f.log.Error("os stat", err) } - if info.ModTime().After(latestStamp) { - latestStamp = info.ModTime() + if info.ModTime().Before(f.mStamp) { + continue // reload not necessary } case <-f.forceReload: case <-f.stopReloader: diff --git a/internal/table/sql_query_test.go b/internal/table/sql_query_test.go index 1a454d3..fd160f7 100644 --- a/internal/table/sql_query_test.go +++ b/internal/table/sql_query_test.go @@ -1,4 +1,5 @@ -//+build !nosqlite3,cgo +//go:build !nosqlite3 && cgo +// +build !nosqlite3,cgo /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/table/sqlite3.go b/internal/table/sqlite3.go index f0c19ea..8b22794 100644 --- a/internal/table/sqlite3.go +++ b/internal/table/sqlite3.go @@ -1,4 +1,5 @@ -//+build !nosqlite3,cgo +//go:build !nosqlite3 && cgo +// +build !nosqlite3,cgo /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/target/remote/debugflags.go b/internal/target/remote/debugflags.go index 76774b9..0a71a10 100644 --- a/internal/target/remote/debugflags.go +++ b/internal/target/remote/debugflags.go @@ -1,4 +1,5 @@ -//+build debugflags +//go:build debugflags +// +build debugflags /* Maddy Mail Server - Composable all-in-one email server. diff --git a/internal/target/skeleton.go b/internal/target/skeleton.go index 4eb2ee5..00d481c 100644 --- a/internal/target/skeleton.go +++ b/internal/target/skeleton.go @@ -1,4 +1,5 @@ -//+build ignore +//go:build ignore +// +build ignore // Copy that file into target/ subdirectory. diff --git a/maddy_debug.go b/maddy_debug.go index fa40aa6..dc03168 100644 --- a/maddy_debug.go +++ b/maddy_debug.go @@ -1,4 +1,5 @@ -//+build debugflags +//go:build debugflags +// +build debugflags /* Maddy Mail Server - Composable all-in-one email server. diff --git a/signal.go b/signal.go index 332a4c6..e952fcf 100644 --- a/signal.go +++ b/signal.go @@ -1,4 +1,5 @@ -//+build darwin dragonfly freebsd linux netbsd openbsd solaris +//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris +// +build darwin dragonfly freebsd linux netbsd openbsd solaris /* Maddy Mail Server - Composable all-in-one email server. diff --git a/signal_nonposix.go b/signal_nonposix.go index 3eaf096..87ea0cd 100644 --- a/signal_nonposix.go +++ b/signal_nonposix.go @@ -1,4 +1,5 @@ -//+build windows plan9 +//go:build windows || plan9 +// +build windows plan9 /* Maddy Mail Server - Composable all-in-one email server. diff --git a/systemd.go b/systemd.go index fa07601..649740d 100644 --- a/systemd.go +++ b/systemd.go @@ -1,4 +1,5 @@ -//+build linux +//go:build linux +// +build linux /* Maddy Mail Server - Composable all-in-one email server. diff --git a/systemd_nonlinux.go b/systemd_nonlinux.go index 7c601b6..e31cd15 100644 --- a/systemd_nonlinux.go +++ b/systemd_nonlinux.go @@ -1,4 +1,5 @@ -//+build !linux +//go:build !linux +// +build !linux /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/basic_test.go b/tests/basic_test.go index c92010a..ac7af2a 100644 --- a/tests/basic_test.go +++ b/tests/basic_test.go @@ -1,4 +1,5 @@ -//+build integration +//go:build integration +// +build integration /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/cover_test.go b/tests/cover_test.go index b43d2d9..ad86c53 100644 --- a/tests/cover_test.go +++ b/tests/cover_test.go @@ -1,4 +1,5 @@ -//+build cover_main +//go:build cover_main +// +build cover_main /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/dovecot_sasl_test.go b/tests/dovecot_sasl_test.go index 1434345..11fbcaf 100644 --- a/tests/dovecot_sasl_test.go +++ b/tests/dovecot_sasl_test.go @@ -1,5 +1,6 @@ -//+build integration -//+build darwin dragonfly freebsd linux netbsd openbsd solaris +//go:build integration && (darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris) +// +build integration +// +build darwin dragonfly freebsd linux netbsd openbsd solaris /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/dovecot_sasld_test.go b/tests/dovecot_sasld_test.go index b2aad8d..fbab1e3 100644 --- a/tests/dovecot_sasld_test.go +++ b/tests/dovecot_sasld_test.go @@ -1,4 +1,5 @@ -//+build integration +//go:build integration +// +build integration /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/gocovcat.go b/tests/gocovcat.go index 5b3e759..4018912 100644 --- a/tests/gocovcat.go +++ b/tests/gocovcat.go @@ -2,6 +2,7 @@ // // From: https://git.lukeshu.com/go/cmd/gocovcat/ // +//go:build ignore // +build ignore // Copyright 2017 Luke Shumaker diff --git a/tests/imapsql_test.go b/tests/imapsql_test.go index 62a0dbe..69f9e7e 100644 --- a/tests/imapsql_test.go +++ b/tests/imapsql_test.go @@ -1,4 +1,5 @@ -//+build integration,cgo,!nosqlite3 +//go:build integration && cgo && !nosqlite3 +// +build integration,cgo,!nosqlite3 /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/issue327_test.go b/tests/issue327_test.go index e6ce3b2..b766424 100644 --- a/tests/issue327_test.go +++ b/tests/issue327_test.go @@ -1,4 +1,5 @@ -//+build integration +//go:build integration +// +build integration /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/limits_test.go b/tests/limits_test.go index bc20c70..f085bb3 100644 --- a/tests/limits_test.go +++ b/tests/limits_test.go @@ -1,4 +1,5 @@ -//+build integration +//go:build integration +// +build integration /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/lmtp_test.go b/tests/lmtp_test.go index 5e86c31..8e29a93 100644 --- a/tests/lmtp_test.go +++ b/tests/lmtp_test.go @@ -1,4 +1,5 @@ -//+build integration +//go:build integration +// +build integration /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/mta_test.go b/tests/mta_test.go index bf62177..21ac001 100644 --- a/tests/mta_test.go +++ b/tests/mta_test.go @@ -1,4 +1,5 @@ -//+build integration +//go:build integration +// +build integration /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/replace_addr_test.go b/tests/replace_addr_test.go index fb1d871..c898071 100644 --- a/tests/replace_addr_test.go +++ b/tests/replace_addr_test.go @@ -1,4 +1,5 @@ -//+build integration +//go:build integration +// +build integration /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/smtp_autobuffer_test.go b/tests/smtp_autobuffer_test.go index b7c2bbd..58ef341 100644 --- a/tests/smtp_autobuffer_test.go +++ b/tests/smtp_autobuffer_test.go @@ -1,4 +1,5 @@ -//+build integration,cgo,!nosqlite3 +//go:build integration && cgo && !nosqlite3 +// +build integration,cgo,!nosqlite3 /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/smtp_test.go b/tests/smtp_test.go index ed1bee4..85a5173 100644 --- a/tests/smtp_test.go +++ b/tests/smtp_test.go @@ -1,4 +1,5 @@ -//+build integration +//go:build integration +// +build integration /* Maddy Mail Server - Composable all-in-one email server. diff --git a/tests/stress_test.go b/tests/stress_test.go index 93be9a0..55e5f76 100644 --- a/tests/stress_test.go +++ b/tests/stress_test.go @@ -1,4 +1,5 @@ -//+build integration +//go:build integration +// +build integration /* Maddy Mail Server - Composable all-in-one email server. From c12b8d68425d6f5e82c5bce7f396d4028b3721b0 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 14:53:36 +0300 Subject: [PATCH 23/45] ci: Use cd - instead of pushd/popd --- .github/workflows/cicd.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 53c5246..77e8296 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -62,16 +62,16 @@ jobs: ./build.sh --static build ./build.sh --destdir ~/package-output/ install mv ~/package-output/ ~/maddy-$(cat .version)-x86_64-linux-musl - pushd ~ + cd ~ tar c ./maddy-$(cat .version)-x86_64-linux-musl | zstd > ~/maddy-x86_64-linux-musl.tar.zst - popd + cd - - name: "Save source tree" run: | rm -rf .git cp -r . ~/maddy-$(cat .version)-src - pushd ~ + cd ~ tar c ./maddy-$(cat .version)-src | zstd > ~/maddy-src.tar.zst - popd + cd - - name: "Upload source tree" uses: actions/upload-artifact@v2 with: From f4e6eb6423342da70a3fccda13d589fa7ab47a22 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 15:07:29 +0300 Subject: [PATCH 24/45] ci: More minor fixes --- .github/workflows/cicd.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 77e8296..64a2787 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -56,21 +56,23 @@ jobs: - uses: actions/checkout@v1 # v2 does not work with containers - name: "Install build dependencies" run: | - apk add --no-cache gcc go + apk add --no-cache gcc go zstd - name: "Create and package build tree" run: | ./build.sh --static build ./build.sh --destdir ~/package-output/ install - mv ~/package-output/ ~/maddy-$(cat .version)-x86_64-linux-musl + ver=$(cat .version) + mv ~/package-output/ ~/maddy-$ver-x86_64-linux-musl cd ~ - tar c ./maddy-$(cat .version)-x86_64-linux-musl | zstd > ~/maddy-x86_64-linux-musl.tar.zst + tar c ./maddy-$ver-x86_64-linux-musl | zstd > ~/maddy-x86_64-linux-musl.tar.zst cd - - name: "Save source tree" run: | rm -rf .git - cp -r . ~/maddy-$(cat .version)-src + ver=$(cat .version) + cp -r . ~/maddy-$ver-src cd ~ - tar c ./maddy-$(cat .version)-src | zstd > ~/maddy-src.tar.zst + tar c ./maddy-$ver-src | zstd > ~/maddy-src.tar.zst cd - - name: "Upload source tree" uses: actions/upload-artifact@v2 From fa1cbd23356c495f04b812122db5738879c20bc0 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 15:07:42 +0300 Subject: [PATCH 25/45] maddy 0.6.0 --- .version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.version b/.version index fb0b754..a918a2a 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -0.6.0-dev +0.6.0 From 94f4e0f2d843f9683f57e324bfb29039c7ec8cf5 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 15:13:38 +0300 Subject: [PATCH 26/45] ci: More minor fixes --- .github/workflows/cicd.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 64a2787..a99a6ac 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -112,6 +112,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: "Generate container metadata" uses: docker/metadata-action@v4 + id: meta with: images: | foxcpp/maddy From aa6480018f506ba6650ce690a0602d89d9f5e560 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 15:19:33 +0300 Subject: [PATCH 27/45] ci: More minor fixes --- .github/workflows/cicd.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index a99a6ac..1247317 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -129,6 +129,7 @@ jobs: with: context: . platforms: linux/amd64,linux/arm64 + file: Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} From 9a1017339bcf540487ad73b98d090632b86b5ecc Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 15:37:14 +0300 Subject: [PATCH 28/45] ci: More minor fixes --- .github/workflows/cicd.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 1247317..23b2641 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -92,6 +92,8 @@ jobs: if: github.ref_type == 'tag' runs-on: ubuntu-latest steps: + - name: Checkout + uses: actions/checkout@v2 - name: "Set up QEMU" uses: docker/setup-qemu-action@v1 with: From 840d68779e79fe45bfeb5d3bc0e83d6573834c22 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 17:11:15 +0300 Subject: [PATCH 29/45] ci: More minor fixes --- .github/workflows/cicd.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 23b2641..d695355 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -59,8 +59,7 @@ jobs: apk add --no-cache gcc go zstd - name: "Create and package build tree" run: | - ./build.sh --static build - ./build.sh --destdir ~/package-output/ install + ./build.sh --builddir ~/package-output/ --static build ver=$(cat .version) mv ~/package-output/ ~/maddy-$ver-x86_64-linux-musl cd ~ From 210a885dc1efdd07f7054ba39ed489facdbb18b0 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 21:20:01 +0300 Subject: [PATCH 30/45] Bump go-imap-sql version Fixes schema upgrade failure. --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 10cdc26..07f0bf1 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 github.com/foxcpp/go-imap-mess v0.0.0-20220105225909-b3469f4a4315 github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed - github.com/foxcpp/go-imap-sql v0.5.1-0.20220105233636-946daf36ce81 + github.com/foxcpp/go-imap-sql v0.5.1-0.20220623181604-c20be1a387b4 github.com/foxcpp/go-mockdns v1.0.0 github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 github.com/go-ldap/ldap/v3 v3.4.3 diff --git a/go.sum b/go.sum index 11ba915..e783716 100644 --- a/go.sum +++ b/go.sum @@ -164,6 +164,8 @@ github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed h1:1Jo7ge github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed/go.mod h1:Shows1vmkBWO40ChOClaUe6DUnZrsP1UPAuoWzIUdgQ= github.com/foxcpp/go-imap-sql v0.5.1-0.20220105233636-946daf36ce81 h1:hd79KlESgagszJqmV+dm36r5NR5NFYCMQ2dWi05gKKs= github.com/foxcpp/go-imap-sql v0.5.1-0.20220105233636-946daf36ce81/go.mod h1:tl6w1OlN7LLvJOoWTR7bNt0JQE+wPbYr8f3/nJSSlwU= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220623181604-c20be1a387b4 h1:UFnLWaLQ0bEziClwROuIYBQ+JHEn4jYxHX19rY0I6Pc= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220623181604-c20be1a387b4/go.mod h1:tl6w1OlN7LLvJOoWTR7bNt0JQE+wPbYr8f3/nJSSlwU= github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= From bbaea0400e5c89835ca6d04f0f84c036e9a3922a Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Thu, 23 Jun 2022 21:25:56 +0300 Subject: [PATCH 31/45] Bump go-imap version Merged upstream v1 fixes into v2 branch. See #504. --- go.mod | 2 +- go.sum | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 07f0bf1..914a7d9 100644 --- a/go.mod +++ b/go.mod @@ -113,4 +113,4 @@ require ( gotest.tools v2.2.0+incompatible // indirect ) -replace github.com/emersion/go-imap => github.com/foxcpp/go-imap v1.0.0-beta.1.0.20220105164802-1e767d4cfd62 +replace github.com/emersion/go-imap => github.com/foxcpp/go-imap v1.0.0-beta.1.0.20220623182312-df940c324887 diff --git a/go.sum b/go.sum index e783716..6544112 100644 --- a/go.sum +++ b/go.sum @@ -152,8 +152,8 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/foxcpp/go-dovecot-sasl v0.0.0-20200522223722-c4699d7a24bf h1:rmBPY5fryjp9zLQYsUmQqqgsYq7qeVfrjtr96Tf9vD8= github.com/foxcpp/go-dovecot-sasl v0.0.0-20200522223722-c4699d7a24bf/go.mod h1:5yZUmwr851vgjyAfN7OEfnrmKOh/qLA5dbGelXYsu1E= -github.com/foxcpp/go-imap v1.0.0-beta.1.0.20220105164802-1e767d4cfd62 h1:fkQX2NRzBgtR2PC60IXzrhcxr3Gti8zIY9HNhJ43/7w= -github.com/foxcpp/go-imap v1.0.0-beta.1.0.20220105164802-1e767d4cfd62/go.mod h1:Qlx1FSx2FTxjnjWpIlVNEuX+ylerZQNFE5NsmKFSejY= +github.com/foxcpp/go-imap v1.0.0-beta.1.0.20220623182312-df940c324887 h1:qUoaaHyrRpQw85ru6VQcC6JowdhrWl7lSbI1zRX1FTM= +github.com/foxcpp/go-imap v1.0.0-beta.1.0.20220623182312-df940c324887/go.mod h1:Qlx1FSx2FTxjnjWpIlVNEuX+ylerZQNFE5NsmKFSejY= github.com/foxcpp/go-imap-backend-tests v0.0.0-20220105184719-e80aa29a5e16 h1:qheFPDpteiUy7Ym18R68OYenpk85UyKYGkhYTmddSBg= github.com/foxcpp/go-imap-backend-tests v0.0.0-20220105184719-e80aa29a5e16/go.mod h1:OPP1AgKxMPo3aHX5pcEZLQhhh5sllFcB8aUN9f6a6X8= github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 h1:pfoFtkTTQ473qStSN79jhCFBWqMQt/3DQ3NGuXvT+50= @@ -162,8 +162,6 @@ github.com/foxcpp/go-imap-mess v0.0.0-20220105225909-b3469f4a4315 h1:3MxfvA+zWxl github.com/foxcpp/go-imap-mess v0.0.0-20220105225909-b3469f4a4315/go.mod h1:S/ELw0SONJ3ffk0ie7TYD6OxoIiyeMI22Fr3kwKUG8s= github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed h1:1Jo7geyvunrPSjL6F6D9EcXoNApS5v3LQaro7aUNPnE= github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed/go.mod h1:Shows1vmkBWO40ChOClaUe6DUnZrsP1UPAuoWzIUdgQ= -github.com/foxcpp/go-imap-sql v0.5.1-0.20220105233636-946daf36ce81 h1:hd79KlESgagszJqmV+dm36r5NR5NFYCMQ2dWi05gKKs= -github.com/foxcpp/go-imap-sql v0.5.1-0.20220105233636-946daf36ce81/go.mod h1:tl6w1OlN7LLvJOoWTR7bNt0JQE+wPbYr8f3/nJSSlwU= github.com/foxcpp/go-imap-sql v0.5.1-0.20220623181604-c20be1a387b4 h1:UFnLWaLQ0bEziClwROuIYBQ+JHEn4jYxHX19rY0I6Pc= github.com/foxcpp/go-imap-sql v0.5.1-0.20220623181604-c20be1a387b4/go.mod h1:tl6w1OlN7LLvJOoWTR7bNt0JQE+wPbYr8f3/nJSSlwU= github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= From 15163e75202dc2287733e75f1fc9c7e235d53184 Mon Sep 17 00:00:00 2001 From: Nick Cao Date: Fri, 24 Jun 2022 17:09:14 +0800 Subject: [PATCH 32/45] pass_table: fix user hash creation --- internal/auth/pass_table/table.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/auth/pass_table/table.go b/internal/auth/pass_table/table.go index 5b9057f..4d0e313 100644 --- a/internal/auth/pass_table/table.go +++ b/internal/auth/pass_table/table.go @@ -145,7 +145,7 @@ func (a *Auth) CreateUserHash(username, password string, hashAlgo string, opts H return fmt.Errorf("%s: create user %s: hash generation: %w", a.modName, key, err) } - if err := tbl.SetKey(key, hash+":"+hash); err != nil { + if err := tbl.SetKey(key, hashAlgo+":"+hash); err != nil { return fmt.Errorf("%s: create user %s: %w", a.modName, key, err) } return nil From 51935f30376b99836ade71af0783ac73bb89184f Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 25 Jun 2022 15:18:27 +0300 Subject: [PATCH 33/45] Bump go-imap-sql version See #509. --- go.mod | 9 ++++++--- go.sum | 4 ---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 914a7d9..8a2584d 100644 --- a/go.mod +++ b/go.mod @@ -17,9 +17,9 @@ require ( github.com/foxcpp/go-dovecot-sasl v0.0.0-20200522223722-c4699d7a24bf github.com/foxcpp/go-imap-backend-tests v0.0.0-20220105184719-e80aa29a5e16 github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 - github.com/foxcpp/go-imap-mess v0.0.0-20220105225909-b3469f4a4315 + github.com/foxcpp/go-imap-mess v0.0.0-20220625121252-2006ec40a870 github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed - github.com/foxcpp/go-imap-sql v0.5.1-0.20220623181604-c20be1a387b4 + github.com/foxcpp/go-imap-sql v0.5.1-0.20220625121648-6e3bebef681a github.com/foxcpp/go-mockdns v1.0.0 github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 github.com/go-ldap/ldap/v3 v3.4.3 @@ -54,7 +54,6 @@ require ( require ( cloud.google.com/go/compute v1.7.0 // indirect - // Do not upgrade go-ntlmssp - newer version are incompatible with go-ldap. github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect github.com/aws/aws-sdk-go v1.44.40 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -114,3 +113,7 @@ require ( ) replace github.com/emersion/go-imap => github.com/foxcpp/go-imap v1.0.0-beta.1.0.20220623182312-df940c324887 + +replace github.com/foxcpp/go-imap-sql => ../go-imap-sql + +replace github.com/foxcpp/go-imap-mess => ../go-imap-mess diff --git a/go.sum b/go.sum index 6544112..e2b04ed 100644 --- a/go.sum +++ b/go.sum @@ -158,12 +158,8 @@ github.com/foxcpp/go-imap-backend-tests v0.0.0-20220105184719-e80aa29a5e16 h1:qh github.com/foxcpp/go-imap-backend-tests v0.0.0-20220105184719-e80aa29a5e16/go.mod h1:OPP1AgKxMPo3aHX5pcEZLQhhh5sllFcB8aUN9f6a6X8= github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 h1:pfoFtkTTQ473qStSN79jhCFBWqMQt/3DQ3NGuXvT+50= github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005/go.mod h1:34FwxnjC2N+EFs2wMtsHevrZLWRKRuVU8wEcHWKq/nE= -github.com/foxcpp/go-imap-mess v0.0.0-20220105225909-b3469f4a4315 h1:3MxfvA+zWxl+p5BeQ7pROzigTSHAcalvsExTu1Is41Y= -github.com/foxcpp/go-imap-mess v0.0.0-20220105225909-b3469f4a4315/go.mod h1:S/ELw0SONJ3ffk0ie7TYD6OxoIiyeMI22Fr3kwKUG8s= github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed h1:1Jo7geyvunrPSjL6F6D9EcXoNApS5v3LQaro7aUNPnE= github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed/go.mod h1:Shows1vmkBWO40ChOClaUe6DUnZrsP1UPAuoWzIUdgQ= -github.com/foxcpp/go-imap-sql v0.5.1-0.20220623181604-c20be1a387b4 h1:UFnLWaLQ0bEziClwROuIYBQ+JHEn4jYxHX19rY0I6Pc= -github.com/foxcpp/go-imap-sql v0.5.1-0.20220623181604-c20be1a387b4/go.mod h1:tl6w1OlN7LLvJOoWTR7bNt0JQE+wPbYr8f3/nJSSlwU= github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= From 8463ee1da6ff091b606466ca4a5113ba03d39d17 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 25 Jun 2022 15:20:39 +0300 Subject: [PATCH 34/45] Fix-up 51935f3 --- go.mod | 4 ---- 1 file changed, 4 deletions(-) diff --git a/go.mod b/go.mod index 8a2584d..e6752e7 100644 --- a/go.mod +++ b/go.mod @@ -113,7 +113,3 @@ require ( ) replace github.com/emersion/go-imap => github.com/foxcpp/go-imap v1.0.0-beta.1.0.20220623182312-df940c324887 - -replace github.com/foxcpp/go-imap-sql => ../go-imap-sql - -replace github.com/foxcpp/go-imap-mess => ../go-imap-mess From d673b5dd407d043dd7fc403459109d38ea504ee5 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 25 Jun 2022 15:22:10 +0300 Subject: [PATCH 35/45] Fix-up 51935f3 --- go.sum | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go.sum b/go.sum index e2b04ed..881a27f 100644 --- a/go.sum +++ b/go.sum @@ -158,8 +158,12 @@ github.com/foxcpp/go-imap-backend-tests v0.0.0-20220105184719-e80aa29a5e16 h1:qh github.com/foxcpp/go-imap-backend-tests v0.0.0-20220105184719-e80aa29a5e16/go.mod h1:OPP1AgKxMPo3aHX5pcEZLQhhh5sllFcB8aUN9f6a6X8= github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 h1:pfoFtkTTQ473qStSN79jhCFBWqMQt/3DQ3NGuXvT+50= github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005/go.mod h1:34FwxnjC2N+EFs2wMtsHevrZLWRKRuVU8wEcHWKq/nE= +github.com/foxcpp/go-imap-mess v0.0.0-20220625121252-2006ec40a870 h1:p2Lw5jR61pnlc3Jn1ETyV0A/EpdrwyR0A/sGTXS0EKs= +github.com/foxcpp/go-imap-mess v0.0.0-20220625121252-2006ec40a870/go.mod h1:S/ELw0SONJ3ffk0ie7TYD6OxoIiyeMI22Fr3kwKUG8s= github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed h1:1Jo7geyvunrPSjL6F6D9EcXoNApS5v3LQaro7aUNPnE= github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed/go.mod h1:Shows1vmkBWO40ChOClaUe6DUnZrsP1UPAuoWzIUdgQ= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220625121648-6e3bebef681a h1:feXUJIFGHuDWTla+GVVujs1NJrdHoy6tTCEOM+I8MuQ= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220625121648-6e3bebef681a/go.mod h1:KtJKMct3aAjl2waDe4XVhUxm9sw/P4xQWY8EPeXKn4w= github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= From 2e14868de405bcc23e075df5c25368ac9720dc96 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 25 Jun 2022 15:29:50 +0300 Subject: [PATCH 36/45] ci: Add a sanity check for .version To ensure mistakes such as #506 will not happen again. --- .github/workflows/cicd.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index d695355..adb7e78 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -61,6 +61,7 @@ jobs: run: | ./build.sh --builddir ~/package-output/ --static build ver=$(cat .version) + if [ "$ver" != "${{github.ref_name}}" ]; then echo ".version does not match the Git tag"; exit 1; fi mv ~/package-output/ ~/maddy-$ver-x86_64-linux-musl cd ~ tar c ./maddy-$ver-x86_64-linux-musl | zstd > ~/maddy-x86_64-linux-musl.tar.zst From 0df6b620e6fb97db4f13081e28447e088bb176c6 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 25 Jun 2022 18:39:55 +0300 Subject: [PATCH 37/45] cli: Warn about upcoming --uid=true change --- internal/cli/ctl/imap.go | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/internal/cli/ctl/imap.go b/internal/cli/ctl/imap.go index 069aef6..ea8f820 100644 --- a/internal/cli/ctl/imap.go +++ b/internal/cli/ctl/imap.go @@ -600,6 +600,10 @@ func msgsRemove(be module.Storage, ctx *cli.Context) error { return cli.Exit("Error: SEQSET is required", 2) } + if !ctx.Bool("uid") { + fmt.Fprintln(os.Stderr, "WARNING: --uid=true will be the default in 0.7") + } + seq, err := imap.ParseSeqSet(seqset) if err != nil { return err @@ -643,6 +647,10 @@ func msgsCopy(be module.Storage, ctx *cli.Context) error { return cli.Exit("Error: TGTMAILBOX is required", 2) } + if !ctx.Bool("uid") { + fmt.Fprintln(os.Stderr, "WARNING: --uid=true will be the default in 0.7") + } + seq, err := imap.ParseSeqSet(seqset) if err != nil { return err @@ -679,6 +687,10 @@ func msgsMove(be module.Storage, ctx *cli.Context) error { return cli.Exit("Error: TGTMAILBOX is required", 2) } + if !ctx.Bool("uid") { + fmt.Fprintln(os.Stderr, "WARNING: --uid=true will be the default in 0.7") + } + seq, err := imap.ParseSeqSet(seqset) if err != nil { return err @@ -709,8 +721,12 @@ func msgsList(be module.Storage, ctx *cli.Context) error { return cli.Exit("Error: MAILBOX is required", 2) } seqset := ctx.Args().Get(2) + uid := ctx.Bool("uid") if seqset == "" { seqset = "1:*" + uid = true + } else if !uid { + fmt.Fprintln(os.Stderr, "WARNING: --uid=true will be the default in 0.7") } seq, err := imap.ParseSeqSet(seqset) @@ -730,7 +746,7 @@ func msgsList(be module.Storage, ctx *cli.Context) error { ch := make(chan *imap.Message, 10) go func() { - err = mbox.ListMessages(ctx.Bool("uid"), seq, []imap.FetchItem{imap.FetchEnvelope, imap.FetchInternalDate, imap.FetchRFC822Size, imap.FetchFlags, imap.FetchUid}, ch) + err = mbox.ListMessages(uid, seq, []imap.FetchItem{imap.FetchEnvelope, imap.FetchInternalDate, imap.FetchRFC822Size, imap.FetchFlags, imap.FetchUid}, ch) }() for msg := range ch { @@ -785,8 +801,12 @@ func msgsDump(be module.Storage, ctx *cli.Context) error { return cli.Exit("Error: MAILBOX is required", 2) } seqset := ctx.Args().Get(2) + uid := ctx.Bool("uid") if seqset == "" { - seqset = "*" + seqset = "1:*" + uid = true + } else if !uid { + fmt.Fprintln(os.Stderr, "WARNING: --uid=true will be the default in 0.7") } seq, err := imap.ParseSeqSet(seqset) @@ -806,7 +826,7 @@ func msgsDump(be module.Storage, ctx *cli.Context) error { ch := make(chan *imap.Message, 10) go func() { - err = mbox.ListMessages(ctx.Bool("uid"), seq, []imap.FetchItem{imap.FetchRFC822}, ch) + err = mbox.ListMessages(uid, seq, []imap.FetchItem{imap.FetchRFC822}, ch) }() for msg := range ch { @@ -833,6 +853,10 @@ func msgsFlags(be module.Storage, ctx *cli.Context) error { return cli.Exit("Error: SEQ is required", 2) } + if !ctx.Bool("uid") { + fmt.Fprintln(os.Stderr, "WARNING: --uid=true will be the default in 0.7") + } + seq, err := imap.ParseSeqSet(seqStr) if err != nil { return err @@ -843,7 +867,7 @@ func msgsFlags(be module.Storage, ctx *cli.Context) error { return err } - _, mbox, err := u.GetMailbox(name, true, nil) + _, mbox, err := u.GetMailbox(name, false, nil) if err != nil { return err } @@ -865,5 +889,5 @@ func msgsFlags(be module.Storage, ctx *cli.Context) error { panic("unknown command: " + ctx.Command.Name) } - return mbox.UpdateMessagesFlags(ctx.IsSet("uid"), seq, op, true, flags) + return mbox.UpdateMessagesFlags(ctx.Bool("uid"), seq, op, true, flags) } From 531cf78a264d1a6743f6158cce424e074304a7af Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 25 Jun 2022 18:42:38 +0300 Subject: [PATCH 38/45] Bump go-imap-sql verison Also remove accidentally added test.conf. See #510. --- cmd/maddy/test.conf | 13 ------------- go.mod | 4 ++-- go.sum | 4 ++++ 3 files changed, 6 insertions(+), 15 deletions(-) delete mode 100644 cmd/maddy/test.conf diff --git a/cmd/maddy/test.conf b/cmd/maddy/test.conf deleted file mode 100644 index cf2f800..0000000 --- a/cmd/maddy/test.conf +++ /dev/null @@ -1,13 +0,0 @@ -state_dir /tmp -runtime_dir /tmp - -imap tcp://127.0.0.1:2222 { - tls off - auth pam - storage imapsql { - driver sqlite3 - dsn /tmp/hello.db - delivery_map email_localpart - auth_normalize precis_casefold - } -} diff --git a/go.mod b/go.mod index e6752e7..8e1937a 100644 --- a/go.mod +++ b/go.mod @@ -17,9 +17,9 @@ require ( github.com/foxcpp/go-dovecot-sasl v0.0.0-20200522223722-c4699d7a24bf github.com/foxcpp/go-imap-backend-tests v0.0.0-20220105184719-e80aa29a5e16 github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 - github.com/foxcpp/go-imap-mess v0.0.0-20220625121252-2006ec40a870 + github.com/foxcpp/go-imap-mess v0.0.0-20220625145025-3c40e241d099 github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed - github.com/foxcpp/go-imap-sql v0.5.1-0.20220625121648-6e3bebef681a + github.com/foxcpp/go-imap-sql v0.5.1-0.20220625153806-70f09b5f83c9 github.com/foxcpp/go-mockdns v1.0.0 github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 github.com/go-ldap/ldap/v3 v3.4.3 diff --git a/go.sum b/go.sum index 881a27f..e7e6a29 100644 --- a/go.sum +++ b/go.sum @@ -160,10 +160,14 @@ github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 h1:pfoFtk github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005/go.mod h1:34FwxnjC2N+EFs2wMtsHevrZLWRKRuVU8wEcHWKq/nE= github.com/foxcpp/go-imap-mess v0.0.0-20220625121252-2006ec40a870 h1:p2Lw5jR61pnlc3Jn1ETyV0A/EpdrwyR0A/sGTXS0EKs= github.com/foxcpp/go-imap-mess v0.0.0-20220625121252-2006ec40a870/go.mod h1:S/ELw0SONJ3ffk0ie7TYD6OxoIiyeMI22Fr3kwKUG8s= +github.com/foxcpp/go-imap-mess v0.0.0-20220625145025-3c40e241d099 h1:e0r3qEQl1K/a3fXftbSGG78DGnmRG7hIhh0UzEW8UNs= +github.com/foxcpp/go-imap-mess v0.0.0-20220625145025-3c40e241d099/go.mod h1:yESOLBW3uVSa7ncJYtDO1tnapt/xb9v1rrn8D5eXups= github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed h1:1Jo7geyvunrPSjL6F6D9EcXoNApS5v3LQaro7aUNPnE= github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed/go.mod h1:Shows1vmkBWO40ChOClaUe6DUnZrsP1UPAuoWzIUdgQ= github.com/foxcpp/go-imap-sql v0.5.1-0.20220625121648-6e3bebef681a h1:feXUJIFGHuDWTla+GVVujs1NJrdHoy6tTCEOM+I8MuQ= github.com/foxcpp/go-imap-sql v0.5.1-0.20220625121648-6e3bebef681a/go.mod h1:KtJKMct3aAjl2waDe4XVhUxm9sw/P4xQWY8EPeXKn4w= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220625153806-70f09b5f83c9 h1:q7xhdvWYAXJunFGfB1qpRyfTIJyzROu3Iup3WByQQ/k= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220625153806-70f09b5f83c9/go.mod h1:8uUTN2RRWZrETuA9pDvDr4SjV1hCvEYG2WOlXuupj+g= github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= From 3edb4b3b75c10a9f6b00c2382ef2abb57e4c2d85 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 25 Jun 2022 18:48:32 +0300 Subject: [PATCH 39/45] Fix-up 531cf78a264d1a6743f6158cce424e074304a7af --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 8e1937a..b5bd1a2 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 github.com/foxcpp/go-imap-mess v0.0.0-20220625145025-3c40e241d099 github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed - github.com/foxcpp/go-imap-sql v0.5.1-0.20220625153806-70f09b5f83c9 + github.com/foxcpp/go-imap-sql v0.5.1-0.20220625154604-220be7ba4d19 github.com/foxcpp/go-mockdns v1.0.0 github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 github.com/go-ldap/ldap/v3 v3.4.3 diff --git a/go.sum b/go.sum index e7e6a29..69afd0b 100644 --- a/go.sum +++ b/go.sum @@ -168,6 +168,8 @@ github.com/foxcpp/go-imap-sql v0.5.1-0.20220625121648-6e3bebef681a h1:feXUJIFGHu github.com/foxcpp/go-imap-sql v0.5.1-0.20220625121648-6e3bebef681a/go.mod h1:KtJKMct3aAjl2waDe4XVhUxm9sw/P4xQWY8EPeXKn4w= github.com/foxcpp/go-imap-sql v0.5.1-0.20220625153806-70f09b5f83c9 h1:q7xhdvWYAXJunFGfB1qpRyfTIJyzROu3Iup3WByQQ/k= github.com/foxcpp/go-imap-sql v0.5.1-0.20220625153806-70f09b5f83c9/go.mod h1:8uUTN2RRWZrETuA9pDvDr4SjV1hCvEYG2WOlXuupj+g= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220625154604-220be7ba4d19 h1:28C6Xgt+b5EnBdjxEwp9mODIRSD0/sCksR4kPOJf8ho= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220625154604-220be7ba4d19/go.mod h1:8uUTN2RRWZrETuA9pDvDr4SjV1hCvEYG2WOlXuupj+g= github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= From 69769c17ab441c36179e4ed4bd6985a1dc468760 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Tue, 28 Jun 2022 01:10:49 +0300 Subject: [PATCH 40/45] Bump go-imap-sql version For https://github.com/foxcpp/maddy/issues/512 fix. --- .version | 2 +- go.mod | 2 +- go.sum | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.version b/.version index a918a2a..ee6cdce 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -0.6.0 +0.6.1 diff --git a/go.mod b/go.mod index b5bd1a2..dbf7dca 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/foxcpp/go-imap-i18nlevel v0.0.0-20200208001533-d6ec88553005 github.com/foxcpp/go-imap-mess v0.0.0-20220625145025-3c40e241d099 github.com/foxcpp/go-imap-namespace v0.0.0-20200802091432-08496dd8e0ed - github.com/foxcpp/go-imap-sql v0.5.1-0.20220625154604-220be7ba4d19 + github.com/foxcpp/go-imap-sql v0.5.1-0.20220627220518-df3b66a5b04f github.com/foxcpp/go-mockdns v1.0.0 github.com/foxcpp/go-mtasts v0.0.0-20191219193356-62bc3f1f74b8 github.com/go-ldap/ldap/v3 v3.4.3 diff --git a/go.sum b/go.sum index 69afd0b..3c8557f 100644 --- a/go.sum +++ b/go.sum @@ -170,6 +170,8 @@ github.com/foxcpp/go-imap-sql v0.5.1-0.20220625153806-70f09b5f83c9 h1:q7xhdvWYAX github.com/foxcpp/go-imap-sql v0.5.1-0.20220625153806-70f09b5f83c9/go.mod h1:8uUTN2RRWZrETuA9pDvDr4SjV1hCvEYG2WOlXuupj+g= github.com/foxcpp/go-imap-sql v0.5.1-0.20220625154604-220be7ba4d19 h1:28C6Xgt+b5EnBdjxEwp9mODIRSD0/sCksR4kPOJf8ho= github.com/foxcpp/go-imap-sql v0.5.1-0.20220625154604-220be7ba4d19/go.mod h1:8uUTN2RRWZrETuA9pDvDr4SjV1hCvEYG2WOlXuupj+g= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220627220518-df3b66a5b04f h1:Jz3h1e5ZYA+ANkVAb5kytcPYuew3lxWQyqHUEAPOQHo= +github.com/foxcpp/go-imap-sql v0.5.1-0.20220627220518-df3b66a5b04f/go.mod h1:8uUTN2RRWZrETuA9pDvDr4SjV1hCvEYG2WOlXuupj+g= github.com/foxcpp/go-mockdns v0.0.0-20191216195825-5eabd8dbfe1f/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= From d6a317e32ac8d2189e66a2444d7805bce0f08e57 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Fri, 1 Jul 2022 23:40:59 +0300 Subject: [PATCH 41/45] docs: Update Arch repository and Docker instructions links See #513. --- docs/tutorials/setting-up.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/tutorials/setting-up.md b/docs/tutorials/setting-up.md index 5bc6648..d17c17c 100644 --- a/docs/tutorials/setting-up.md +++ b/docs/tutorials/setting-up.md @@ -44,11 +44,10 @@ Your options are: * Docker image (Linux, amd64) ``` - docker pull foxcpp/maddy:latest + docker pull foxcpp/maddy:0.6 ``` - See README at [hub.docker.com](https://hub.docker.com/r/foxcpp/maddy) - for Docker-specific instructions. + See [here](../docker) for Docker-specific instructions. * Building from source @@ -58,7 +57,7 @@ Your options are: For Arch Linux users, `maddy` and `maddy-git` PKGBUILDs are available in AUR. Additionally, binary packages are available in 3rd-party - repository at https://foxcpp.dev/archlinux/ + repository at [https://maddy.email/archlinux/](https://maddy.email/archlinux/) ## System configuration (systemd-based distribution) From 96fc685c103f789ea4a41d98b4d426cf699880ff Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Fri, 1 Jul 2022 23:55:24 +0300 Subject: [PATCH 42/45] ci: Fix-up .version sanity check --- .github/workflows/cicd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index adb7e78..f445c96 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -61,7 +61,7 @@ jobs: run: | ./build.sh --builddir ~/package-output/ --static build ver=$(cat .version) - if [ "$ver" != "${{github.ref_name}}" ]; then echo ".version does not match the Git tag"; exit 1; fi + if [ "v$ver" != "${{github.ref_name}}" ]; then echo ".version does not match the Git tag"; exit 1; fi mv ~/package-output/ ~/maddy-$ver-x86_64-linux-musl cd ~ tar c ./maddy-$ver-x86_64-linux-musl | zstd > ~/maddy-x86_64-linux-musl.tar.zst From ac4a75b7d54c20c131174aa55ccf63a18850b1b8 Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sat, 2 Jul 2022 00:05:46 +0300 Subject: [PATCH 43/45] maddy 0.6.2 --- .version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.version b/.version index ee6cdce..b616048 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -0.6.1 +0.6.2 From 0eb8a95d4f0585b235e9e97873ad6654994b8494 Mon Sep 17 00:00:00 2001 From: Martin Ashby Date: Sat, 2 Jul 2022 22:34:51 +0100 Subject: [PATCH 44/45] Remove references to man.5 from build.sh man.5 page was removed in c0eacfa0f34f4040ec4fd5d3ca44a35e8cde21b4 removed remaining references in build.sh, otherwise strict build (like arch linux makepkg) fails. --- build.sh | 7 ------- 1 file changed, 7 deletions(-) diff --git a/build.sh b/build.sh index 9ea3355..f612d64 100755 --- a/build.sh +++ b/build.sh @@ -104,9 +104,6 @@ build_man_pages() { for f in ./docs/man/*.1.scd; do scdoc < "$f" > "${builddir}/man/$(basename "$f" .scd)" done - for f in ./docs/man/*.5.scd; do - scdoc < "$f" > "${builddir}/man/$(basename "$f" .scd)" - done } build() { @@ -159,10 +156,6 @@ install() { for f in "${builddir}"/man/*.1; do command install -m 0644 "$f" "${destdir}/${prefix}/share/man/man1/" done - command install -m 0755 -d "${destdir}/${prefix}/share/man/man5/" - for f in "${builddir}"/man/*.5; do - command install -m 0644 "$f" "${destdir}/${prefix}/share/man/man5/" - done fi } From 90f88c89cdb0330ca9840ee518d17a153b6edb0c Mon Sep 17 00:00:00 2001 From: "fox.cpp" Date: Sun, 3 Jul 2022 16:37:50 +0300 Subject: [PATCH 45/45] test: Fix Dovecot interop tests Dovecot no longer prints the specific error message used to detect successful startup. --- tests/dovecot_sasl_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/dovecot_sasl_test.go b/tests/dovecot_sasl_test.go index 11fbcaf..673a117 100644 --- a/tests/dovecot_sasl_test.go +++ b/tests/dovecot_sasl_test.go @@ -36,6 +36,7 @@ import ( "strings" "syscall" "testing" + "time" "github.com/foxcpp/maddy/tests" ) @@ -47,6 +48,7 @@ func init() { } const dovecotConf = `base_dir = $ROOT/run/ +state_dir = $ROOT/lib/ log_path = /dev/stderr ssl = no @@ -149,7 +151,8 @@ func runDovecot(t *testing.T) (string, *exec.Cmd) { line := scnr.Text() // One of messages printed near completing initialization. - if strings.Contains(line, "master: Error: file_dotlock_open(/var/lib/dovecot/instances) failed: Permission denied") { + if strings.Contains(line, "starting up for imap") { + time.Sleep(500*time.Millisecond) ready <- struct{}{} }