mirror of
https://github.com/mjl-/mox.git
synced 2024-12-25 07:53:47 +03:00
change "mox setaccountpassword" to use an account name as parameter, not email address
because with the name you would expect an account name. and the email-resolving behaviour is surprising: with wildcard addresses you can use any address, including a typo. you would change the password of the address with the wildcard, without any warning. accounts are more precise and less error-prone. for issue #68 by x8x
This commit is contained in:
parent
8c2814df89
commit
f1f3135135
7 changed files with 19 additions and 15 deletions
6
ctl.go
6
ctl.go
|
@ -355,15 +355,15 @@ func servectlcmd(ctx context.Context, ctl *ctl, shutdown func()) {
|
|||
case "setaccountpassword":
|
||||
/* protocol:
|
||||
> "setaccountpassword"
|
||||
> address
|
||||
> account
|
||||
> password
|
||||
< "ok" or error
|
||||
*/
|
||||
|
||||
addr := ctl.xread()
|
||||
account := ctl.xread()
|
||||
pw := ctl.xread()
|
||||
|
||||
acc, _, err := store.OpenEmail(addr)
|
||||
acc, err := store.OpenAccount(account)
|
||||
ctl.xcheck(err, "open account")
|
||||
defer func() {
|
||||
if acc != nil {
|
||||
|
|
|
@ -61,7 +61,7 @@ func TestCtl(t *testing.T) {
|
|||
|
||||
// "setaccountpassword"
|
||||
testctl(func(ctl *ctl) {
|
||||
ctlcmdSetaccountpassword(ctl, "mjl@mox.example", "test4321")
|
||||
ctlcmdSetaccountpassword(ctl, "mjl", "test4321")
|
||||
})
|
||||
|
||||
err := queue.Init()
|
||||
|
|
8
doc.go
8
doc.go
|
@ -16,7 +16,7 @@ low-maintenance self-hosted email.
|
|||
mox serve
|
||||
mox quickstart [-existing-webserver] [-hostname host] user@domain [user | uid]
|
||||
mox stop
|
||||
mox setaccountpassword address
|
||||
mox setaccountpassword account
|
||||
mox setadminpassword
|
||||
mox loglevels [level [pkg]]
|
||||
mox queue list
|
||||
|
@ -156,9 +156,11 @@ password itself, are stored in the account database. The stored secrets are for
|
|||
authentication with: scram-sha-256, scram-sha-1, cram-md5, plain text (bcrypt
|
||||
hash).
|
||||
|
||||
Any email address configured for the account can be used.
|
||||
The parameter is an account name, as configured under Accounts in domains.conf
|
||||
and as present in the data/accounts/ directory, not a configured email address
|
||||
for an account.
|
||||
|
||||
usage: mox setaccountpassword address
|
||||
usage: mox setaccountpassword account
|
||||
|
||||
# mox setadminpassword
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ services:
|
|||
- ./testdata/imaptest/imaptest.mbox:/mox/imaptest.mbox
|
||||
working_dir: /mox
|
||||
tty: true # For job control with set -m.
|
||||
command: sh -c 'set -m; mox serve & sleep 1; echo testtest | mox setaccountpassword mjl@mox.example; fg'
|
||||
command: sh -c 'set -m; mox serve & sleep 1; echo testtest | mox setaccountpassword mjl; fg'
|
||||
healthcheck:
|
||||
test: netstat -nlt | grep ':1143 '
|
||||
interval: 1s
|
||||
|
|
12
main.go
12
main.go
|
@ -681,7 +681,7 @@ func ctlcmdConfigAccountAdd(ctl *ctl, account, address string) {
|
|||
ctl.xwrite(account)
|
||||
ctl.xwrite(address)
|
||||
ctl.xreadok()
|
||||
fmt.Printf("account added, set a password with \"mox setaccountpassword %s\"\n", address)
|
||||
fmt.Printf("account added, set a password with \"mox setaccountpassword %s\"\n", account)
|
||||
}
|
||||
|
||||
func cmdConfigAccountRemove(c *cmd) {
|
||||
|
@ -1136,7 +1136,7 @@ pick a random, unguessable password, preferably at least 12 characters.
|
|||
}
|
||||
|
||||
func cmdSetaccountpassword(c *cmd) {
|
||||
c.params = "address"
|
||||
c.params = "account"
|
||||
c.help = `Set new password an account.
|
||||
|
||||
The password is read from stdin. Secrets derived from the password, but not the
|
||||
|
@ -1144,7 +1144,9 @@ password itself, are stored in the account database. The stored secrets are for
|
|||
authentication with: scram-sha-256, scram-sha-1, cram-md5, plain text (bcrypt
|
||||
hash).
|
||||
|
||||
Any email address configured for the account can be used.
|
||||
The parameter is an account name, as configured under Accounts in domains.conf
|
||||
and as present in the data/accounts/ directory, not a configured email address
|
||||
for an account.
|
||||
`
|
||||
args := c.Parse()
|
||||
if len(args) != 1 {
|
||||
|
@ -1157,9 +1159,9 @@ Any email address configured for the account can be used.
|
|||
ctlcmdSetaccountpassword(xctl(), args[0], pw)
|
||||
}
|
||||
|
||||
func ctlcmdSetaccountpassword(ctl *ctl, address, password string) {
|
||||
func ctlcmdSetaccountpassword(ctl *ctl, account, password string) {
|
||||
ctl.xwrite("setaccountpassword")
|
||||
ctl.xwrite(address)
|
||||
ctl.xwrite(account)
|
||||
ctl.xwrite(password)
|
||||
ctl.xreadok()
|
||||
}
|
||||
|
|
2
testdata/integration/moxacmepebble.sh
vendored
2
testdata/integration/moxacmepebble.sh
vendored
|
@ -33,7 +33,7 @@ CURL_CA_BUNDLE=/integration/tls/ca.pem curl -o /integration/tmp-pebble-ca.pem ht
|
|||
mox -checkconsistency serve &
|
||||
while true; do
|
||||
if test -e data/ctl; then
|
||||
echo -n accountpass1234 | mox setaccountpassword moxtest1@mox1.example
|
||||
echo -n accountpass1234 | mox setaccountpassword moxtest1
|
||||
break
|
||||
fi
|
||||
sleep 0.1
|
||||
|
|
2
testdata/integration/moxmail2.sh
vendored
2
testdata/integration/moxmail2.sh
vendored
|
@ -29,7 +29,7 @@ unbound-control -s 172.28.1.30 reload # reload unbound with zone file changes
|
|||
mox -checkconsistency serve &
|
||||
while true; do
|
||||
if test -e data/ctl; then
|
||||
echo -n accountpass4321 | mox setaccountpassword moxtest2@mox2.example
|
||||
echo -n accountpass4321 | mox setaccountpassword moxtest2
|
||||
break
|
||||
fi
|
||||
sleep 0.1
|
||||
|
|
Loading…
Reference in a new issue