]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
bouncemail: add test
authorBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 11 Jan 2024 15:45:43 +0000 (16:45 +0100)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 11 Jan 2024 15:45:54 +0000 (16:45 +0100)
Fix a bug making the unsubscribed user bouncing to still create a file

src/mlmmj.c
tests/mlmmj.c

index 6c63b913ea2b4479b5660004593691e80cd81661..2d5b65b7005ab18c4e90d7d6fe8181767e944701 100644 (file)
@@ -366,21 +366,21 @@ bouncemail(int listfd, const char *theaddress, const char *identifier)
                        return (BOUNCE_FAIL);
                }
        }
-       bfd = openat(bdfd, address, O_WRONLY|O_APPEND|O_CREAT, S_IRUSR|S_IWUSR);
-       close(bdfd);
-       if (bfd == -1) {
-               log_error(LOG_ARGS, "Cound not open(bounce/%s)", address);
-               free(address);
-               return (BOUNCE_FAIL);
-       }
        *tmp = '@';
-
        if (is_subbed(listfd, address, 0) == SUB_NONE) {
                log_error(LOG_ARGS, "%s is bouncing but not subscribed?",
                    address);
                free(address);
                return (BOUNCE_OK);
        }
+       *tmp = '=';
+       bfd = openat(bdfd, address, O_WRONLY|O_APPEND|O_CREAT, S_IRUSR|S_IWUSR);
+       close(bdfd);
+       if (bfd == -1) {
+               log_error(LOG_ARGS, "Cound not open(bounce/%s)", address);
+               free(address);
+               return (BOUNCE_FAIL);
+       }
 
        t = time(NULL);
        ctime_r(&t, buf);
index b403c8dd493211c890a93276c283253969f7c2f9..b95325833b44217c9384fa03811646a281456aa5 100644 (file)
@@ -105,6 +105,7 @@ ATF_TC_WITHOUT_HEAD(smtp_bad_ehlo);
 ATF_TC_WITHOUT_HEAD(smtp_no_ehlo);
 ATF_TC_WITHOUT_HEAD(endsmtp);
 ATF_TC_WITHOUT_HEAD(do_bouncemail);
+ATF_TC_WITHOUT_HEAD(bouncemail);
 ATF_TC_WITHOUT_HEAD(send_mail_basics);
 ATF_TC_WITHOUT_HEAD(send_mail);
 ATF_TC_WITHOUT_HEAD(getlistdelim);
@@ -1147,6 +1148,50 @@ ATF_TC_BODY(do_bouncemail, tc)
        close(ctrlfd);
 }
 
+ATF_TC_BODY(bouncemail, tc)
+{
+       mkdir("list", 0755);
+       int fd = open("list", O_DIRECTORY);
+
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "confsub"), BOUNCE_OK);
+       mkdir("list/subconf", 0755);
+       close(open("list/subconf/bapt=freebsd.org", O_CREAT, 0644));
+       ATF_REQUIRE_EQ(access("list/subconf/bapt=freebsd.org", F_OK), 0);
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "confsub"), BOUNCE_OK);
+       ATF_REQUIRE_EQ(access("list/subconf/bapt=freebsd.org", F_OK), -1);
+
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "confunsub"), BOUNCE_OK);
+       mkdir("list/unsubconf", 0755);
+       close(open("list/unsubconf/bapt=freebsd.org", O_CREAT, 0644));
+       ATF_REQUIRE_EQ(access("list/unsubconf/bapt=freebsd.org", F_OK), 0);
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "confunsub"), BOUNCE_OK);
+       ATF_REQUIRE_EQ(access("list/unsubconf/bapt=freebsd.org", F_OK), -1);
+
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "probe"), BOUNCE_FAIL);
+       mkdir("list/bounce", 0755);
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "probe"), BOUNCE_OK);
+
+       close(open("list/bounce/bapt=freebsd.org-probe", O_CREAT, 0644));
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "probe"), BOUNCE_OK);
+       ATF_REQUIRE_EQ(access("list/bounce/bapt=freebsd.org-probe", F_OK), -1);
+
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt@FreeBSD.org", "plop"), BOUNCE_OK);
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "1234"), BOUNCE_OK);
+       ATF_REQUIRE_EQ(access("list/bounce/bapt=freebsd.org", F_OK), -1);
+
+       mkdir("list/subscribers.d", 0755);
+       atf_utils_create_file("list/subscribers.d/b", "bapt@FreeBSD.org");
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "1234"), BOUNCE_DONE);
+       ATF_REQUIRE_EQ(access("list/bounce/bapt=freebsd.org", F_OK), 0);
+       ATF_REQUIRE(atf_utils_grep_file("1234:.*", "list/bounce/bapt=freebsd.org"));
+
+       ATF_REQUIRE_EQ(bouncemail(fd, "bapt=FreeBSD.org", "2323"), BOUNCE_DONE);
+       ATF_REQUIRE_EQ(access("list/bounce/bapt=freebsd.org", F_OK), 0);
+
+       ATF_REQUIRE(atf_utils_grep_file("1234:.*", "list/bounce/bapt=freebsd.org"));
+       ATF_REQUIRE(atf_utils_grep_file("2323:.*", "list/bounce/bapt=freebsd.org"));
+}
+
 ATF_TC_BODY(send_mail_basics, tc)
 {
        struct mail mail = { 0 };
@@ -2791,6 +2836,7 @@ ATF_TP_ADD_TCS(tp)
        ATF_TP_ADD_TC(tp, smtp_no_ehlo);
        ATF_TP_ADD_TC(tp, endsmtp);
        ATF_TP_ADD_TC(tp, do_bouncemail);
+       ATF_TP_ADD_TC(tp, bouncemail);
        ATF_TP_ADD_TC(tp, send_mail_basics);
        ATF_TP_ADD_TC(tp, send_mail);
        ATF_TP_ADD_TC(tp, getlistdelim);