Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
nixos/dovecot: Fix createMailUser implementation
This option got introduced in 7904499 and it didn't check whether mailUser and mailGroup are null, which they are by default. Now we're only creating the user if createMailUser is set in conjunction with mailUser and the group if mailGroup is set as well. I've added a NixOS VM test so that we can verify whether dovecot works without any additional options set, so it serves as a regression test for issue #29466 and other issues that might come up with future changes to the Dovecot service. Signed-off-by: aszlig <aszlig@redmoonstudios.org> Fixes: #29466 Cc: @qknight, @abbradar, @ixmatus, @siddharthist
- Loading branch information
Showing
3 changed files
with
73 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import ./make-test.nix { | ||
name = "dovecot"; | ||
|
||
machine = { pkgs, ... }: { | ||
imports = [ common/user-account.nix ]; | ||
services.postfix.enable = true; | ||
services.dovecot2.enable = true; | ||
services.dovecot2.protocols = [ "imap" "pop3" ]; | ||
environment.systemPackages = let | ||
sendTestMail = pkgs.writeScriptBin "send-testmail" '' | ||
#!${pkgs.stdenv.shell} | ||
exec sendmail -vt <<MAIL | ||
From: root@localhost | ||
To: alice@localhost | ||
Subject: Very important! | ||
Hello world! | ||
''; | ||
|
||
testImap = pkgs.writeScriptBin "test-imap" '' | ||
#!${pkgs.python3.interpreter} | ||
import imaplib | ||
with imaplib.IMAP4('localhost') as imap: | ||
imap.login('alice', 'foobar') | ||
imap.select() | ||
status, refs = imap.search(None, 'ALL') | ||
assert status == 'OK' | ||
assert len(refs) == 1 | ||
status, msg = imap.fetch(refs[0], 'BODY[TEXT]') | ||
assert status == 'OK' | ||
assert msg[0][1].strip() == b'Hello world!' | ||
''; | ||
|
||
testPop = pkgs.writeScriptBin "test-pop" '' | ||
#!${pkgs.python3.interpreter} | ||
import poplib | ||
pop = poplib.POP3('localhost') | ||
try: | ||
pop.user('alice') | ||
pop.pass_('foobar') | ||
assert len(pop.list()[1]) == 1 | ||
status, fullmail, size = pop.retr(1) | ||
assert status.startswith(b'+OK ') | ||
body = b"".join(fullmail[fullmail.index(b""):]).strip() | ||
assert body == b'Hello world!' | ||
finally: | ||
pop.quit() | ||
''; | ||
|
||
in [ sendTestMail testImap testPop ]; | ||
}; | ||
|
||
testScript = '' | ||
$machine->waitForUnit('postfix.service'); | ||
$machine->waitForUnit('dovecot2.service'); | ||
$machine->succeed('send-testmail'); | ||
$machine->waitUntilFails('[ "$(postqueue -p)" != "Mail queue is empty" ]'); | ||
$machine->succeed('test-imap'); | ||
$machine->succeed('test-pop'); | ||
''; | ||
} |