mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2024-01-19 02:48:50 +00:00
5908d9f060
* chore: Extract out Dovecot Quota test cases into new test file Test cases are just cut + paste, no logic changed there yet. * chore: Rename test case descriptions * chore: Use `setup ...` methods instead of direct calls * chore: Adjust `_run_in_container_bash` to `_run_in_container` Plus some additional bug fixes in the disabled test case * tests(refactor): Revise ENV test cases for max mailbox and message sizes * tests(refactor): Revise ENV test cases for mailbox and message limits v2 Removes the extra variables and filtering in favour of explicit values instead of matching for comparison. - Easier at a glance to know what is actually expected. - Additionally reworks the quota limit checks in other test cases. Using a different formatter for `doveadm` is easier to match the desired value (`Limit`). * chore: Sync improvement from `tests.bats` master --- NOTE: This PR has been merged to avoid additional maintenance burden without losing the improvements. It was not considered complete, but remaining tasks were not documented in the PR.
74 lines
2 KiB
Bash
Executable file
74 lines
2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# shellcheck source=../scripts/helpers/index.sh
|
|
source /usr/local/bin/helpers/index.sh
|
|
|
|
function _main() {
|
|
_require_n_parameters_or_print_usage 1 "${@}"
|
|
|
|
local MAIL_ACCOUNT="${1}"
|
|
shift
|
|
local QUOTA="${*}"
|
|
|
|
_validate_parameters
|
|
_manage_dovecot_quota_update "${MAIL_ACCOUNT}" "${QUOTA}"
|
|
}
|
|
|
|
function __usage() {
|
|
printf '%s' "${PURPLE}setquota${RED}(${YELLOW}8${RED})
|
|
|
|
${ORANGE}USAGE${RESET}
|
|
./setup.sh quota set <MAIL ACCOUNT> [<QUOTA>]
|
|
|
|
${ORANGE}OPTIONS${RESET}
|
|
${BLUE}Generic Program Information${RESET}
|
|
help Print the usage information.
|
|
|
|
${ORANGE}DESCRIPTION${RESET}
|
|
Set a quota (storage limit) for an existing mail account.
|
|
|
|
The quota value is in bytes. You may use a unit suffix for convenience,
|
|
such as 10M for 10 MebiBytes (MiB). A value of 0 opts out of enforcing quota.
|
|
|
|
${ORANGE}EXAMPLES${RESET}
|
|
${LWHITE}./setup.sh quota set user@example.com 5G${RESET}
|
|
The account 'user@example.com' is restricted to a 5GiB storage limit.
|
|
|
|
${ORANGE}EXIT STATUS${RESET}
|
|
Exit status is 0 if command was successful. If wrong arguments are provided
|
|
or arguments contain errors, the script will exit early with exit status 1.
|
|
|
|
"
|
|
}
|
|
|
|
function _validate_parameters() {
|
|
# MAIL_ACCOUNT
|
|
_arg_expect_mail_account
|
|
_account_should_already_exist
|
|
|
|
# QUOTA
|
|
_quota_request_if_missing
|
|
_quota_unit_is_valid
|
|
}
|
|
|
|
function _quota_request_if_missing() {
|
|
if [[ -z ${QUOTA} ]]; then
|
|
read -r -p 'Enter quota (e.g. 10M): ' QUOTA
|
|
echo
|
|
[[ -z "${QUOTA}" ]] && _exit_with_error 'Quota must not be empty (use 0 for unlimited quota)'
|
|
fi
|
|
}
|
|
|
|
|
|
# Dovecot docs incorrectly refer to these units with names for SI types (base 10),
|
|
# But then mentions they're actually treated as IEC type (base 2):
|
|
# https://doc.dovecot.org/settings/types/#size
|
|
function _quota_unit_is_valid() {
|
|
if ! grep -qE "^([0-9]+(B|k|M|G|T)|0)\$" <<< "${QUOTA}"; then
|
|
__usage
|
|
_exit_with_error 'Invalid quota format. e.g. 302M (B (byte), k (kibibyte), M (mebibyte), G (gibibyte) or T (tebibyte))'
|
|
fi
|
|
}
|
|
|
|
_main "${@}"
|